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) )
結果:
それぞれ 1.2MB の 2 つのファイルを 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 よりも少し高速であるため、より適切なオプションである可能性があります。
したがって、結論は、比較を高速化するか、メモリ使用量を減らすかによって異なります。