У меня есть сайт, на котором пользователи загружают фотографии, но важно, чтобы они не загружали одну и ту же фотографию дважды. Мне нужно сравнить каждый загруженный файл со всеми фотографиями в каталоге, чтобы увидеть, существует ли уже изображение. Единственная загвоздка - я не могу использовать имя файла. Есть ли способ сравнить размеры всех фотографий сразу, чтобы увидеть, есть ли совпадения?
Я еще не пробовал код, потому что понятия не имею, возможно ли это.






То, что вы ищете, - это хеш-функция, он принимает в качестве входных данных файл и возвращает (гораздо меньшее) значение, уникальное для файла. Когда загружается новый файл, вы затем сравниваете новое значение хеш-функции с базой данных предыдущих значений хеш-функции, чтобы определить, новый это файл или нет.
Я бы посмотрел на использование функции PHP-хеш, вы должны ввести загруженный файл (который, как я предполагаю, находится в переменной) и получить обратно хеш-значение. Если вы действительно сохраняете файлы на диск до вычисления хеш-значения, sha1_file - это то, что вы ищете.
@ Mekade24, вы можете полностью изменить имена файлов на хеш-имя - это было бы очень простым решением.
@ Mekade24 два файла имеют уникальные хэш-значения с очень очень высокой вероятностью (см. stackoverflow.com/questions/1867191/…).
Используйте следующее:-
<?php
$directoryName = 'imagesDir';
$fileToBeChecked = 'newlyUploadedImageFilePath';
function checkIfSameSizeFileExistsInDirectory($dir, $file){
$entries = array_diff(scandir($dir), array('.', '..'));
foreach ($entries as $entry){
if (!is_dir($entry)){
if (filesize($entry)==filesize($file)){
return true;
}
}
}
return false;
}
?>
Тот факт, что два файла имеют одинаковый размер, не означает, что это один и тот же файл. Это не сработает.
Я могу это понять, однако пользователь попросил сравнить, существует ли файл того же размера.
Однако для того, чтобы найти тот же файл из каталога, сравнение хэшей является очевидным и эффективным способом. Но пользователь может использовать приведенный выше код для сравнения размеров. Вышеупомянутое решение может помочь в этом.
Спасибо, я считаю, что это то, что я ищу. Нужно ли мне создавать полностью отдельную базу данных для хранения хеш-файлов, или я могу изменить имя файла на хеш-значение во время начальной загрузки? Кроме того, есть ли гарантия, что каждый хэш-файл будет уникальным, если файл не идентичен? @ Дерек Браун