【问题标题】:Php - folder last modification datetime -php - 文件夹最后修改日期时间 -
【发布时间】:2011-09-17 20:43:08
【问题描述】:

我正在编写创建所有文件和文件夹列表的脚本, 并且下次运行时,我想检查自上次以来文件夹是否被修改,如果没有,则排除本次读取文件夹,

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

它有效,当我在子文件夹中添加新文件时,日期正在改变,但如果我在文件夹中编辑文件,文件夹最后修改日期 id 没有改变,使用这些功能。

有没有一种方法可以检查文件夹中的文件是否已被编辑,而无需逐个查看所有文件??

这个脚本会经常运行,所以我不希望它每次都遍历所有文件和文件夹,(在某些文件夹中有很多文件)

【问题讨论】:

  • 您要求的内容在很大程度上取决于文件系统配置。您将哪个文件系统用于相关目录?
  • 当你的意思是编辑文件夹你的意思是删除文件或更改文件,对吧?
  • 当我添加新文件,删除文件,添加文件夹/删除它们,日期改变,但是当我在文件夹中编辑文件时,例如编辑一些 php 文件,taht 文件父文件夹修改 dat 时间不是改变了

标签: php windows file datetime directory


【解决方案1】:

filemtime() 返回文件数据块被写入的时间,即文件内容发生变化的时间。现在文件夹也是special file,其中包含有关文件夹中包含的文件的信息,我理解的是,当您在文件夹上使用filemtime() 时,它会显示文件夹(文件)的byte-size 何时更改。因此,当您将文件添加到文件夹时,会在文件夹(特殊文件)中创建有关该文件的条目,并且其 byte-size 会更改,但是当您编辑已经存在的文件时,文件夹的(特殊文件)字节大小不会改变,所以filemtime() 显示没有变化。

【讨论】:

    【解决方案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__));
    

    【讨论】:

    • thanx 看起来这行得通,我会做更多的测试,thnx
    猜你喜欢
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 2021-10-25
    相关资源
    最近更新 更多