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是最快的3.7比SHA1快,但它不是有效的內存。
Sha1_file和md5_file具有內存高效性,它們使用了file_get_contents使用的大約5%的內存。
md5_file可能是一個更好的選擇,因爲它比sha1快一點。
所以結論是,它取決於,如果你想要更快的比較,或更少的內存使用。
不 - 雖然sha1算法更復雜/具有更高的順序,但PHP中的實際實現會創建sha1哈希比md5稍快(至少是上次檢查PHP 5.1或其他) – symcbean 2010-02-19 13:06:14
@symcbean you're大概是正確的,我不知道PHP的具體細節。 – ykaganovich 2010-02-19 17:53:03