2011-10-03 68 views
15

我使用PHP函數filemtime得到最後修改時間與PHP 5.3。這個函數工作得很好,但是當文件名有特殊字符(例如變音符號)時,它似乎有一些問題。filemtime()[function.filemtime]:stat帶有元音變音的文件名失敗

如果我與變音符號的文件名運行它

$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無BOM,我也試過:

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

,但它並沒有幫助。

+0

你有文件相同的字符集爲你的操作系統? –

+2

鑑於它是一個Windows系統,它幾乎可以肯定是NTFS,它是utf-16。 –

+0

目前我在Windows 7機器上(使用NTFS格式的硬盤)使用此腳本,但後來我想在Ubuntu服務器上使用它。 –

回答

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字符串異8859-1所以我結束了這個小代碼,適用於我的項目:

$file = 'C:/pictures/München.JPG'; 
$lastModified = @filemtime($file); 
if($lastModified == NULL) 
    $lastModified = filemtime(utf8_decode($file)); 
echo $lastModified; 

謝謝所有誰提交了評論。你引導我走向正確的方向。 :-)

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); 
     } 
    } 
相關問題