如果您只需要找出兩個檔案是否相同,比較檔案雜湊值可能會效率不佳,尤其是在大型檔案上。如果每個檔案的第二個位元組不同,則沒有理由讀取兩個完整檔案並進行所有數學運算。如果您不需要儲存雜湊值供稍後使用,則可能不需要僅為了比較檔案而計算雜湊值。這樣可能會快得多
<?php
define('READ_LEN', 4096);
if(files_identical('file1.txt', 'file2.txt'))
echo '檔案相同';
else
echo '檔案不相同';
function files_identical($fn1, $fn2) {
if(filetype($fn1) !== filetype($fn2))
return FALSE;
if(filesize($fn1) !== filesize($fn2))
return FALSE;
if(!$fp1 = fopen($fn1, 'rb'))
return FALSE;
if(!$fp2 = fopen($fn2, 'rb')) {
fclose($fp1);
return FALSE;
}
$same = TRUE;
while (!feof($fp1) and !feof($fp2))
if(fread($fp1, READ_LEN) !== fread($fp2, READ_LEN)) {
$same = FALSE;
break;
}
if(feof($fp1) !== feof($fp2))
$same = FALSE;
fclose($fp1);
fclose($fp2);
return $same;
}
?>