【问题标题】:find out when a file's contents were last modified找出文件内容最后一次修改的时间
【发布时间】:2014-07-22 02:24:23
【问题描述】:

我编写了一个由许多文件夹和文件组成的 CMS 脚本,我想找到一种方法来跟踪我上次修改任何文件的时间。我写了一个递归目录/文件检查,找到最新修改的文​​件并给我日期和时间但是我的问题是:每次我尽可能多地将文件复制到服务器或重命名文件,即使我没有'不要对任何文件进行任何修改,新复制的文件或重命名的文件现在具有今天的日期,因此我的脚本显示今天进行了修改,即使我几周没有进行更改。

我该如何规避呢? 我正在使用filemtime()

PHP 有没有办法知道文件最后一次修改的时间(即文件中的代码最后一次工作的时间)? 谢谢

【问题讨论】:

  • 问题是你不同意操作系统对修改的定义,在这种情况下你必须自己记录这些信息
  • 您可以使用 md5 哈希来实际了解您的文件何时被修改。
  • @ChibuezeOpata 我该怎么做?你什么意思?
  • 我的意思是,您可以在检查最后修改日期的任何时候存储文件的 md5 散列,并交叉检查此散列与最后保存的散列以了解内容是否实际更改。您可以考虑适当更改问题的标题以获得更好的答案。
  • @ChibuezeOpata 如果我按照您的建议进行操作,我将不得不存储所有文件的所有 md5_file 哈希值,不是吗?还是我错过了什么?

标签: php filemtime


【解决方案1】:

我找到了一种方法并想发布答案:

$test = new SplFileInfo('path/to/file');
echo  $test->getMTime();
echo date('Y-m-d',$test->getMTime());

SplFileInfo::getMTim​​e 实际上会返回最后一次修改文件内容的时间,而不是文件的最后修改日期

【讨论】:

  • SPLFileInfo::getMTime() 访问与filemtime() 完全相同的数据。没有区别。
  • @duskwuff 我刚刚进行了一些比较getMTimefilemtime 的测试,我认为getMTime 更可靠,因为filemtime 在其他操作系统上可能有奇怪的行为,但我不能肯定地说它们可能有不同的值。
  • 如果您参考相关的 PHP 源代码(spl_directory.c vs. filestat.c),两个函数都会调用 php_stat() 并返回 FS_MTIME 字段。同样,这两种方法之间没有区别。
  • @duskwuff 我认为这是有区别的,因为我得到了不同的结果!例如,如果您重命名服务器上的文件,FTP 浏览器和 filemtime() 将返回您重命名文件的时间,即使您没有更改内容,而 SPLFileInfo::getMTim​​e() 仍将返回上次更改文件内容的时间。
  • 我很确定你错了。这两个函数的底层实现是相同的。它们不可能返回不同的结果。
猜你喜欢
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
相关资源
最近更新 更多