достаточно ли 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,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 был самым быстрым на 3.7 быстрее, чем sha1, но это не эффективно с памятью.
Sha1_file и md5_file эффективно используют память, они используют около 5% памяти, используемой file_get_contents.
md5_file может быть лучшим вариантом, потому что он немного быстрее, чем sha1.
Таким образом, вывод состоит в том, что все зависит от того, хотите ли вы сравнить быстрее или использовать меньше памяти.