filemtime()[function.filemtime]:对于带有变音符号的文件名,stat失败

Ben*_*uer 15 php statistics utf-8 diacritics filemtime

我使用PHP函数filemtime来获取PHP 5.3的最后修改时间.这个函数效果很好,但是当文件名有特殊字符时(例如变音符号),它似乎有些问题.

如果我用变音符号在文件名上运行它

$stat = filemtime('C:/pictures/München.JPG');
Run Code Online (Sandbox Code Playgroud)

然后我得到输出:

Warning: filemtime() [function.filemtime]: stat failed for C:/pictures/München.JPG
Run Code Online (Sandbox Code Playgroud)

如果我将文件从"München.JPG"重命名为"Muenchen.JPG"并再次执行相同的操作:

 $stat = filemtime('C:/pictures/Muenchen.JPG');
Run Code Online (Sandbox Code Playgroud)

一切正常!

我的PHP文件保存为UTF-8而没有BOM,我也尝试过:

clearstatcache();
$stat = filemtime(utf8_encode('C:/pictures/München.JPG'));
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.

Ben*_*uer 12

通过以下代码片段,我发现Windows 7上的文件编码是"ISO-8859-1":

$scandir = scandir('.')
$encoding = mb_detect_encoding($scandir[0], 'ISO-8859-1, UTF-8, ASCII');
echo $encoding;
Run Code Online (Sandbox Code Playgroud)

我已经读过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;
Run Code Online (Sandbox Code Playgroud)

感谢所有提交评论的人.你引导我朝着正确的方向前进.:-)