Filemtime() [function.filemtime]: stat failed для имен файлов с помощью умляутов
Я использую функцию 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'));
но это не помогло.
Ответы
Ответ 1
В следующем фрагменте кода я обнаружил, что кодировка файла в 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;
Спасибо всем, кто отправил комментарий. Вы направили меня в правильном направлении.: -)
Ответ 2
попробуйте это
$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);
}
}