2011-10-03 21 views
15

Tôi sử dụng hàm PHP filemtime để nhận thời gian sửa đổi cuối cùng với PHP 5.3. Chức năng này hoạt động rất tốt nhưng dường như có một số vấn đề khi tên tập tin có các ký tự đặc biệt (ví dụ: umlauts).filemtime() [function.filemtime]: stat không thành công cho tên tập tin có dấu phẩy

Nếu tôi chạy nó trên một tên tập tin với umlauts

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

sau đó tôi nhận được kết quả:

Warning: filemtime() [function.filemtime]: stat failed for C:/pictures/München.JPG 

Nếu tôi đổi tên các tập tin từ "München.JPG" thành "Muenchen.JPG" và làm điều tương tự một lần nữa:

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

mọi thứ hoạt động tốt!

file PHP của tôi được lưu dưới dạng UTF-8 mà không BOM và tôi cũng đã cố gắng:

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

nhưng nó đã không giúp.

+0

Bạn có charset cùng trong nội dung tập tin trong hệ điều hành của bạn? –

+2

Cho nó là một hệ thống cửa sổ, nó gần như chắc chắn NTFS, đó là utf-16. –

+0

Hiện tại tôi sử dụng tập lệnh này trên máy tính Windows 7 (với đĩa cứng được định dạng NTFS) nhưng sau này tôi muốn sử dụng nó trên máy chủ Ubuntu. –

Trả lời

12

Với đoạn mã sau đây tôi phát hiện ra rằng mã hóa tập tin trên Windows 7 là "tiêu chuẩn ISO-8859-1":

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

Tôi đã đọc rằng utf8_decode chuyển đổi một chuỗi UTF-8 để ISO- 8859-1 vì vậy tôi đã kết thúc bằng mã nhỏ này hoạt động cho dự án của tôi:

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

Cảm ơn tất cả những ai đã gửi nhận xét. Bạn đã hướng tôi đi đúng hướng. :-)

1

thử này

$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); 
     } 
    } 
Các vấn đề liên quan