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”重命名为“Muenchen.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 回答