php判断两个文件是否完全相同

场景:在线文件存储,如各种云备份功能;

起因:如果有大量的小文件上传,有些是重复的,会造成服务器端大量的文件冗余,霸占了大量的硬盘容量不说,还不方便维护管理,这个时候,就需要判断服务器端上是否存在文件了。

解决:

1、比较笨的办法:用file_get_contents把文件load进内存里对二进制进行比较,这种比较占系统资源,效率也不太高。

2、计算文件hash值,可以md5,sha1,crc32等多种方法同时使用,这样就可以避免单一方式重复碰撞的可能,但是建议两种方式为宜,减少运算量,可以先检查文件大小,再检查md5,如果都相同,可以再增加检查sha1或crc32,不同文件全部重复的可能性,几乎不存在。

代码:

$filename = "test.txt";
$sha1file = sha1_file($filename);
echo $sha1file;
$md5file = md5_file($filename);
echo $md5file;

做云存储、网盘什么之类的应该也是用的这种原理,但肯定会更细致。以后再慢慢研究。