filemtime() [функция.filemtime]: ошибка статистики для имен файлов с umlauts

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

если я запускаю его с именем файла с umlauts

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

затем я получаю выход:

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

если я переименую файл из " München.JPG " to " Muenchen.JPG" и сделать то же самое опять:

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

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

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

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

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

2 ответов


со следующим фрагментом кода я узнал, что кодировка файла в 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, Y H:i:s.", filemtime(utf8_decode($dir."/".$file)));
                    echo "<br>";
                }                
            }            

            echo "<br>";
            closedir($dh);
        }
    }