2011-06-18 96 views
0

即時通訊編寫腳本,創建所有文件和文件夾列表, ,當它下次運行時,我想檢查文件夾是否自上次修改,如果不是,從文件夾中排除閱讀這個時候,Php - 文件夾最後修改日期時間 -

我使用filemtime()和stat()函數,

它的工作原理,當我在子文件夾的日期改變添加新文件,但如果我編輯在文件夾中的文件,文件夾最後修改日期編號沒有改變,使用這些功能。

有沒有辦法如何檢查文件夾中的文件是否已被編輯,而不需要逐一瀏覽所有文件?

這個腳本會經常跑,所以我不希望因此它經過的所有文件和文件夾每次,(在某些文件夾中有大量文件)

+0

您要求的內容在很大程度上取決於文件系統配置。你使用哪個文件系統來處理這些目錄? – hakre

+0

可能的重複:[Windows資源管理器中「修改日期」文件夾的規則](http://stackoverflow.com/questions/1025187/rules-for-date-modified-of-folders-in-windows-explorer) – hakre

+0

當你的意思是編輯文件夾你的意思是刪除文件或更改文件,對不對? – lovesh

回答

2

這可能工作:

function foldermtime($dir) { 
    $foldermtime = 0; 

    $flags = FilesystemIterator::SKIP_DOTS | FilesystemIterator::CURRENT_AS_FILEINFO; 
    $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, $flags)); 

    while ($it->valid()) { 
     if (($filemtime = $it->current()->getMTime()) > $foldermtime) { 
      $foldermtime = $filemtime; 
     } 
     $it->next(); 
    } 

    return $foldermtime ?: false; 
} 

var_dump(foldermtime(__DIR__)); 
+0

thanx它看起來這個作品,我會做更多的測試,thnx – Edmhs

4

filemtime()返回正在寫入文件的數據塊的時間,即文件內容發生更改的時間。現在文件夾也是一個special file其中包含有關該文件夾中包含的文件的信息,以及我的理解是,當您使用filemtime()對文件夾(文件)的byte-size發生更改時顯示的文件夾。所以當你添加一個文件到文件夾中時,會在文件夾(特殊文件)中創建一個關於該文件的條目並且它的byte-size發生了變化,但是當你編輯一個已經存在的文件時,該文件夾的(特殊文件)字節大小不會改變,所以filemtime )顯示沒有變化。

+0

thnx解釋 – Edmhs

相關問題