filemtime () : stat fallita per nomi di file con dieresi

Uso la function PHP filemtime per get l'ultima modifica con PHP 5.3. Questa function funziona molto bene, ma sembra che abbia qualche problema quando i nomi dei file hanno caratteri speciali (ad esempio dieresi).

Se lo eseguo su un nome di file con dieresi

$stat = filemtime('C:/pictures/München.JPG'); 

poi ottengo l'output:

 Warning: filemtime() [function.filemtime]: stat failed for C:/pictures/München.JPG 

Se cambio il nome del file da "München.JPG" a "Muenchen.JPG" e ripeto la stessa cosa:

  $stat = filemtime('C:/pictures/Muenchen.JPG'); 

tutto funziona bene!

Il mio file PHP viene salvato come UTF-8 senza BOM e ho anche provato:

 clearstatcache(); $stat = filemtime(utf8_encode('C:/pictures/München.JPG')); 

ma non ha aiutato.

Con il seguente frammento di codice ho scoperto che la codifica del file su Windows 7 è "ISO-8859-1":

 $scandir = scandir('.') $encoding = mb_detect_encoding($scandir[0], 'ISO-8859-1, UTF-8, ASCII'); echo $encoding; 

Ho letto che utf8_decode converte una string UTF-8 in ISO-8859-1 quindi ho finito con questo piccolo codice che funziona per il mio progetto:

 $file = 'C:/pictures/München.JPG'; $lastModified = @filemtime($file); if($lastModified == NULL) $lastModified = filemtime(utf8_decode($file)); echo $lastModified; 

Grazie a tutti coloro che hanno inviato un commento. Mi hai guidato nella giusta direzione. 🙂

prova questo

 $dir = 'uploads/'; if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { clearstatcache(); if(is_file($dir."/".$file)) { echo $file; echo " - "; echo "Last modified: " . date ("F d, YH:i:s.", filemtime(utf8_decode($dir."/".$file))); echo "<br>"; } } echo "<br>"; closedir($dh); } }