filemtime () [function.filemtime]: сбой статистики для имен файлов с помощью umlauts - PullRequest
15 голосов
/ 03 октября 2011

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 05 октября 2011

С помощью следующего фрагмента кода я обнаружил, что кодировка файла в 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;

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

1 голос
/ 05 апреля 2013

попробуйте

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