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); } }