I've created a website which shows the files and directories of a specific folder(named documents). The user can navigate through directories and if he choose a file (pdf doc etc) it downloads it. The problem is that it works in all browsers but specifically in safari if the user chooses a file (pdf doc etc) it won't download it and a new window will pop saying for example:
The requested URL /root/documents/2013-01-13 1η Έκτακτη - 1η ΕΣ/Î Ïακτικά 1ης Εκτακτης Γ.Σ. TÎœ.ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙÎΩÎΙΩÎ.doc was not found on this server.
The weird letters suppose to be greek. I'm trying to figure out why and the fact that it hapens only in safari seems really weird to me. Here is the code that is responsible for the content of the links. I have put a big arrow as a comment above the code that's responsible for the links of files (it's inside "if"). Any idea would be really helpful.
<?php
function convert_to( $source ){
$encoding = mb_detect_encoding( $source, "auto" );
if ($encoding !== 'UTF-8'){
return mb_convert_encoding( $source, 'UTF-8','UTF-8');
}
else {
return $source;
}
}
?>
<div id="container">
<img class="logo" src="images/logo.jpg" title="uop search engine" width="800" height="80" />
<table class="tbl">
<tr>
<td>
<p class="pl" >Πλοήγηση στα πρακτικά των συνελεύσεων</p>
</td>
<td style="text-align:right;">
<form action='' method="post">
<input type='search' id="search" name='s' autocomplete="off">
<input type='submit' id="button" value='Search' class="button1" >
</form>
</td>
</tr>
</table>
<div class="tfclear"></div>
</div>
<div id="container">
<?php
include "showresults.php";
?>
</div>
<table class="sortable">
<thead>
<tr>
<th>Filename</th>
<th>Type</th>
<th>Size <small>(KB)</small></th>
<th>Date Modified</th>
</tr>
</thead>
<tbody>
<?php
if (!isset($_GET['currentdirectory'])){
$rootDirectory=opendir("./documents");
//$currentDirectory=ROOT;
}
else {
$currentDirectory = $_GET['currentdirectory'];
$rootDirectory=opendir($currentDirectory);
}
//echo $currentDirectory;
//echo $rootDirectory;
starter($rootDirectory);
Function starter($myDirectory){
while($entryName=readdir($myDirectory)) {
$dirArray[]=$entryName;
}
function findexts ($filename) {
$filename=strtolower($filename);
$exts=split("[/\\.]", $filename);
$n=count($exts)-1;
$exts=$exts[$n];
return $exts;
}
closedir($myDirectory);
$indexCount=count($dirArray);
sort($dirArray);
$c=0;
for($index=0; $index < $indexCount; $index++) {
//echo $dirArray[$index];
if($_SERVER['QUERY_STRING']=="hidden"){
$hide="";
$ahref="./";
$atext="Hide";
}
else {
$hide=".";
$ahref="./?hidden";
$atext="Show";
}
if(substr("$dirArray[$index]", 0, 1) != $hide) {
$name=$dirArray[$index];
$namehref=$dirArray[$index];
$extn=findexts($dirArray[$index]);
if (!isset($_GET['currentdirectory'])){
$MYCDIR = "./documents";
}
else {
$MYCDIR = $_GET['currentdirectory'];
//echo $_GET['currentdirectory'];
$MYCDIR = iconv("UTF-8", "UTF-8",$MYCDIR);
if($c==0){
$parent="Γονικός κατάλογος";
print("
<tr class='$class'>
<td><a href='".dirname($_SERVER[PHP_SELF])."'>".$parent."</a></td>
</tr>");
$c=1;
}
}
// echo mb_detect_encoding( $MYCDIR, "auto" );
$size=number_format(filesize($MYCDIR."/".$dirArray[$index])/1024,2). ' KB';
$modtime=date("M j Y g:i A", filemtime($MYCDIR."/".$dirArray[$index]));
$timekey=date("YmdHis", filemtime($MYCDIR."/".$dirArray[$index]));
switch ($extn){
case "png": $extn="PNG Image"; break;
case "jpg": $extn="JPEG Image"; break;
case "svg": $extn="SVG Image"; break;
case "gif": $extn="GIF Image"; break;
case "ico": $extn="Windows Icon"; break;
case "txt": $extn="Text File"; break;
case "log": $extn="Log File"; break;
case "htm": $extn="HTML File"; break;
case "php": $extn="PHP Script"; break;
case "js": $extn="Javascript"; break;
case "css": $extn="Stylesheet"; break;
case "pdf": $extn="PDF Document"; break;
case "zip": $extn="ZIP Archive"; break;
case "bak": $extn="Backup File"; break;
default: $extn=strtoupper($extn)." File"; break;
}
if(is_dir($MYCDIR."/".$dirArray[$index])) {
$extn="<Directory>";
$size=folderSize($MYCDIR."/".$dirArray[$index]);
$size=number_format($size/1024,2). ' KB';
$class="dir";
}
else {
$class="file";
}
if($name=="."){
$name=". (Current Directory)";
$extn="<System Dir>";
}
if($name==".."){
$name=".. (Parent Directory)";
$extn="<System Dir>";
}
//echo $namehref;
//<~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Here is the problem
if ($extn!="<Directory>"){
$hrefparameter = convert_to($MYCDIR."/".$namehref);
$hrefparameter = str_replace("./","/",$hrefparameter);
//echo mb_detect_encoding( $hrefparameter, "auto" );
print("
<tr class='$class'>
<td><a target='blank' href='".SUBFOLDER.$hrefparameter."'>".convert_to($name)."</a></td>
<td>$extn</td>
<td>$size</td>
<td sorttable_customkey='$timekey'>$modtime</td>
</tr>");
}
else {
$hrefparameter0 = $MYCDIR."/$namehref";
$hrefparameter = convert_to($MYCDIR."/$namehref");
print("
<tr class='$class'>
<td><a href='".SUBFOLDER."?currentdirectory=".urlencode($hrefparameter)."&cdir=".urlencode($hrefparameter0)."'>".convert_to($name)."</a></td>
<td>$extn</td>
<td>$size</td>
<td sorttable_customkey='$timekey'>$modtime</td>
</tr>");
}
//echo mb_detect_encoding( $hrefparameter, "auto" );
}
}
}
FUNCTION folderSize($dir){
$count_size = 0;
$count = 0;
$dir_array = scandir($dir);
foreach($dir_array as $key=>$filename){
if($filename!=".." && $filename!="."){
if(is_dir($dir."/".$filename)){
$new_foldersize = foldersize($dir."/".$filename);
$count_size = $count_size+ $new_foldersize;
}
else if(is_file($dir."/".$filename)){
$count_size = $count_size + filesize($dir."/".$filename);
$count++;
}
}
}
return $count_size;
}
?>
<div id="showing"></div>
<div id="results" class="results">
</div>
</tbody>
</table>
<form>
<input
type='button'
id="button"
value='DownloadAll'
class="button2"
<?php if (!isset($_GET['currentdirectory'])){ $_GET['currentdirectory']=""; } ?>
onClick="window.location='downloadZip.php?currentdirectory=<?php echo $_GET['currentdirectory']; ?>';" >
</form>