如何检查文件是否与以前相同

时间:2011-03-22 11:48:37

标签: php

我需要检查服务器上某个目录中存在的文件是否与5分钟前的文件相同?

在特定目录上,我每隔几分钟删除并重新创建一个具有相同名称的文件。脚本是每2分钟访问一次文件。所以在时间t,脚本会检查文件并执行操作。然后在时间t + 1,删除并重新创建文件(相同名称但可能是不同的内容)。然后在时间t + 2,脚本再次查找文件。

所以在第二次检查中,有没有办法检查文件是否已被更改(无需阅读内容)??

8 个答案:

答案 0 :(得分:10)

确定文件是否已更改的第一个想法是使用filemtime()函数检查其修改时间。

但我猜这不会有用,因为你要定期删除并重新创建文件。


所以,在你的情况下,一个非常快的(但当然不安全)第一种方法是检查文件的大小:如果它已经改变,它不是同一个文件。
在PHP中,可以使用filesize()函数确定文件大小。


然后,如果大小没有改变,您通常希望计算文件内容的哈希 - 通常是md5sha1哈希。< / p>

在PHP中,您将使用以下功能之一,具体取决于您要使用的算法:

答案 1 :(得分:4)

您可以使用md5_file()函数计算文件的“指纹”,该函数将指示文件是否已被更改。

e.g。

<?php

$file1_fp = md5_file($fname1);
$file2_fp = md5_file($fname2);

if ($file1_fp === $file2_fp )
{

  //do something..
}

?>

请参阅:http://php.net/manual/en/function.md5-file.php

答案 2 :(得分:3)

从PHP中,您可以使用函数filemtime来获取文件的最后修改时间戳。

小心!

此函数的返回值被缓存,并且从同一脚本多次调用它将导致返回相同的值,即使文件在此期间已更改!要解决此问题,您需要在致电filemtime之前致电clearstatcache

如果您在每个脚本中调用filemtime 一次(然后脚本终止),这不会影响您,您也不需要执行clearstatcache

答案 3 :(得分:2)

使用filemtime检查上次修改文件的日期。 http://php.net/manual/en/function.filemtime.php

答案 4 :(得分:0)

如果您可以信任时间戳,请使用文件的时间戳来区分它,否则,使用 MD5摘要等或执行比特比较

答案 5 :(得分:0)

我会检查文件的校验和是否已更改。这个单行计算MD5哈希:

md5(file_get_contents('/path/to/file'))

作为替代方案,您可以(如果操作系统和FS支持此操作)依赖于文件创建日期时间。

答案 6 :(得分:0)

检查fileinode()。如果文件被删除并重新创建,则即使文件将获得相同的内容,inode也会不同。

答案 7 :(得分:0)

比较计算出的MD5 - 这应该指出对文件的任何更改