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快一点.
因此,结论是,如果您想要更快的比较或更少的内存使用,它取决于它.