PHP 8.5.0 Alpha 4 available for testing

Voting

: nine plus zero?
(Example: nine)

The Note You're Voting On

Chris
15 years ago
If you just need to find out if two files are identical, comparing file hashes can be inefficient, especially on large files. There's no reason to read two whole files and do all the math if the second byte of each file is different. If you don't need to store the hash value for later use, there may not be a need to calculate the hash value just to compare files. This can be much faster:

<?php
define
('READ_LEN', 4096);

if(
files_identical('file1.txt', 'file2.txt'))
echo
'files identical';
else
echo
'files not identical';

// pass two file names
// returns TRUE if files are the same, FALSE otherwise
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;
}
?>

<< Back to user notes page

To Top