sha1_file 够好吗?
使用 sha1_file 就足够了,碰撞的可能性很小,但这几乎不会发生。为了减少几乎 0 比较文件大小的机会:
function is_duplicate_file( $file1, $file2)
{
if(filesize($file1) !== filesize($file2)) return false;
if( sha1_file($file1) == sha1_file($file2) ) return true;
return false;
}
md5 比 sha1 快,但它产生的唯一输出较少,使用 md5 时碰撞的可能性仍然很小。
可扩展性?
有几种方法可以比较文件,使用哪种方法取决于您的性能问题,我对不同的方法进行了小测试:
1-直接文件比较:
if( file_get_contents($file1) != file_get_contents($file2) )
2- Sha1_file
if( sha1_file($file1) != sha1_file($file2) )
3- md5_file
if( md5_file($file1) != md5_file($file2) )
结果:
2 个 1.2MB 的文件比较了 100 次,我得到了以下结果:
--------------------------------------------------------
method time(s) peak memory
--------------------------------------------------------
file_get_contents 0.5 2,721,576
sha1_file 1.86 142,960
mdf5_file 1.6 142,848
file_get_contents 比 sha1 快 3.7,但内存效率不高。
Sha1_file 和 md5_file 是内存高效的,它们使用了 file_get_contents 使用的内存的大约 5%。
md5_file 可能是一个更好的选择,因为它比 sha1 快一点。
所以结论是,它取决于,如果你想要更快的比较,或者更少的内存使用。