Php 检查不同目录中的文件是否与原始文件相同

Php 检查不同目录中的文件是否与原始文件相同,php,Php,我现在尝试了一些事情,但没有成功 到目前为止,我尝试的是: echo sha1_file("development/index.php")." <- Dev<br>"; // 39e7851f050051abf91eb0791ae6a87084113dd9 echo sha1_file("customer/index.php")." <- Customer"; //17c64da656fae781dd404bbdc10fd2bcb58e12d9 如果两个文件都有不同的名

我现在尝试了一些事情,但没有成功

到目前为止,我尝试的是:

echo sha1_file("development/index.php")." <- Dev<br>"; // 39e7851f050051abf91eb0791ae6a87084113dd9
echo sha1_file("customer/index.php")." <- Customer"; //17c64da656fae781dd404bbdc10fd2bcb58e12d9

如果两个文件都有不同的名称和不同的
filetime
值,那么它们的哈希值自然会不同。如果您想知道两个文件的内容是否相同,则必须比较内容的哈希值,或者简单地将内容作为一个整体进行比较:

$contentHash1 = sha1(file_get_contents($file1));
$contentHash2 = sha1(file_get_contents($file2));
echo 'Hash 1: ', $contentHash1, '<br>Hash 2: ', $contentHash2;
$contentHash1=sha1(文件获取内容($file1));
$contentHash2=sha1(文件获取内容($file2));
回显“哈希1:”、$contentHash1、
哈希2:”、$contentHash2;

如果这些散列仍然不匹配,请尝试对内容字符串进行
trim
(其中一个文件中的额外行很容易丢失,并确保两个文件中的编码相同。

我认为您应该尝试一些允许按内容进行比较的工具(例如total commander)


然后查找差异,这将让您了解sha方法不起作用的原因,如果您想在php中比较文件,可能还需要做些什么。

可能的重复项您确定文件相同吗?同一文件的文件大小应该相同,无论其创建或修改时间如何。您可能需要拿一个较小的文件,这样你就可以用手检查它是否真的彼此不同。文件不一样。Filezilla可能更改了行尾。我会冒险说它们不是相同的。我将它们从磁盘重新加载到两个目录,并且成功了…我在某个地方犯了一个错误…也没有找到其他问题,但是@MarkusMüller指出了我的错误。谢谢。这不是真的,sha1_文件只查看文件的内容,因此
sha1_文件($file)==sha1(file_获取内容($file))
@BartHaalstra:它们并不完全相同,因为
file_获取内容
默认情况下不使用流API(为此,您必须自己指定一个
$context
sha1_文件
会这样做(我相信它是以二进制模式读取文件,
file_get_contents
创建一个
zval
字符串)
echo filemtime("development/index.php")." <- Dev<br>"; // 1422516938 
echo filemtime("customer/index.php")." <- Customer"; // 1422516943 
copy('development/index.php', 'customer/index.php'); // copy file

echo sha1_file("development/index.php")." <- Dev<br>";
echo sha1_file("customer/index.php")." <- Cust<br>";
$contentHash1 = sha1(file_get_contents($file1));
$contentHash2 = sha1(file_get_contents($file2));
echo 'Hash 1: ', $contentHash1, '<br>Hash 2: ', $contentHash2;