2011-06-18 126 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

相关问题