16

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」から「München.JPG」に変更し、同じことをもう一度行うと:

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

すべてうまくいきます!

私のPHPファイルはBOMなしでUTF-8として保存され、私も試しました:

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

しかし、それは役に立ちませんでした。

4

2 に答える 2

12

次のコード スニペットを使用すると、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;

コメントを寄せてくださった皆様、ありがとうございます。あなたは私を正しい方向に導いてくれました。:-)

于 2011-10-04T21:26:19.750 に答える
1

これを試して

$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);
        }
    }
于 2013-04-05T07:50:07.587 に答える