warning obtener modificacion for fecha failed current created create archivo php utf-8 statistics diacritics filemtime

obtener - touch file php



filemtime()[function.filemtime]: error de stat para nombres de archivo con diƩresis (2)

Utilizo la función de PHP filemtime para obtener la última modificación con PHP 5.3. Esta función funciona muy bien, pero parece tener algunos problemas cuando los nombres de archivo tienen caracteres especiales (por ejemplo, diéresis).

Si lo ejecuto en un nombre de archivo con diéresis

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

entonces obtengo la salida:

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

Si cambio el nombre del archivo de "München.JPG" a "Muenchen.JPG" y hago lo mismo de nuevo:

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

¡todo funciona bien!

Mi archivo PHP se guarda como UTF-8 sin BOM y también lo intenté:

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

pero no ha ayudado.


Con el siguiente fragmento de código descubrí que la codificación del archivo en Windows 7 es "ISO-8859-1":

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

He leído que utf8_decode convierte una cadena UTF-8 a ISO-8859-1, así que terminé con este pequeño código que funciona para mi proyecto:

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

Gracias a todos los que han enviado un comentario. Me has guiado en la dirección correcta. :-)


prueba esto

$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, Y H:i:s.", filemtime(utf8_decode($dir."/".$file))); echo "<br>"; } } echo "<br>"; closedir($dh); } }