Мой вопрос касается моей идеи, где я мог бы проверить, было ли уже загружено изображение, сравнивая их строки в кодировке base64 …
Примером использования будет поиск дубликатов в вашей базе данных …
Думаю, операция будет довольно большой — сначала конвертируем изображение в base64, а затем используем что-то вроде strcmp () для сравнения.
Не уверен, что в этом есть смысл, но что вы думаете об этой идее?
Будет ли это слишком большой операцией? Насколько точным это будет? Имеет ли идея смысл?
Вот функция, которая может помочь вам сравнить файлы быстрее.
Помимо проверки очевидной вещи, такой как размер файла, вы можете играть больше, сравнивая двоичные фрагменты.
Например, проверьте последние n байтов, а также фрагмент случайного смещения.
Я использовал сравнение контрольной суммы в качестве последнего средства.
При оптимизации порядка проверки вы также можете принять во внимание, ожидаете ли вы, что файлы будут другими или нет.
function areEqual($firstPath, $secondPath, $chunkSize = 500){
// First check if file are not the same size as the fastest method
if(filesize($firstPath) !== filesize($secondPath)){
return false;
}
// Compare the first ${chunkSize} bytes
// This is fast and binary files will most likely be different
$fp1 = fopen($firstPath, 'r');
$fp2 = fopen($secondPath, 'r');
$chunksAreEqual = fread($fp1, $chunkSize) == fread($fp2, $chunkSize);
fclose($fp1);
fclose($fp2);
if(!$chunksAreEqual){
return false;
}
// Compare hashes
// SHA1 calculates a bit faster than MD5
$firstChecksum = sha1_file($firstPath);
$secondChecksum = sha1_file($secondPath);
if($firstChecksum != $secondChecksum){
return false;
}
return true;
}
Если бы я делал что-то подобное, я бы использовал хэш md5 вместо base64_encode.
$equal = ( md5($image1) == md5($image2)) ? true : false;