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ファイルはBOMなしでUTF-8として保存され、次のことも試しました。
clearstatcache();
$stat = filemtime(utf8_encode('C:/pictures/München.JPG'));
しかし、それは役に立ちませんでした。
次のコードスニペットで、Windows7のファイルエンコーディングが「ISO-8859-1」であることがわかりました。
$scandir = scandir('.')
$encoding = mb_detect_encoding($scandir[0], 'ISO-8859-1, UTF-8, ASCII');
echo $encoding;
tf8_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);
}
}