filemtime () : stat failed для имен файлов с помощью умляутов

Я использую функцию PHP filemtime, чтобы получить последнее время модификации с PHP 5.3. Эти функции работают очень хорошо, но, похоже, некоторые проблемы возникают, когда имена файлов имеют специальные символы (например, умлауты).

Если я запустил его на имя файла с умляутами

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

то я получаю вывод:

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

Если я переименую файл с «München.JPG» на «Muenchen.JPG» и повторю то же самое:

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

все работает отлично!

Мой PHP-файл сохраняется как UTF-8 без спецификации, и я также попытался:

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

но это не помогло.

В следующем фрагменте кода я узнал, что кодировка файла в Windows 7 «ISO-8859-1»:

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

Я прочитал, что utf8_decode преобразует строку UTF-8 в ISO-8859-1, поэтому я закончил с этим небольшим кодом, который работает для моего проекта:

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

Спасибо всем, кто отправил комментарий. Вы направили меня в правильном направлении. 🙂

попробуй это

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