Проверка файла на уникальность

481
.
Хочу сделать чтобы при выгрузке файла в Джоне, шла проверка по размеру или содержимому. (Или хотя бы выводился список похожих Загрузок ориентируясь по названию). Чтобы пользователи не плодили копии одних и тех же файлов.
Подскажите куски кода, которыми можно это сделать на РНР7.
И было бы полезно услышать комментарии как оптимизировать это дело (если надо/возможно)?
.
Chifty, Тынц md5-file
Ну и при загрузке хеш записывать в таблицу с файлами, если хеши совпадают, второй файл не сохранять, а просто ссылку на уже существующий сделать.
.
Неплохо было бы разжиться куском кода, который выводит уведомление с ссылкой, на существующий файл.
А также куском кода, который бы искал загрузки с похожим названием (например по совпадению 5ти знаков подряд в имени)
.
Chifty, Ну так ты покажи на чем остановился, а то вариаций может быть столько, сколько сайтов в интернете
.
Добавлено: 08.09.2018 / 08:02
Остановился ещё на стадии планирования куда лучше писать хэш - в дополнительное поле к загрузке или в отдельную таблицу. Чтобы оптимальнее по нагрузке.
И как потом сгенерировать хэш для уже имеющихся файлов?
А насчёт поиска по имени я что-то не разобрался как искать совпадение нескольких символов подряд, если обе строки разные по длине и совпадение может быть в разных концах строк. (такой поиск вообще возможен?)

Добавлено: 08.09.2018 / 10:49
Короче придумал я как примерно оно будет.
Будет отдельная таблица: ИД загрузки / РЕФИД дополнительного файла (если есть) / ИМЯ загрузки или дополнительного файла / РАЗМЕР в байтах / ХЕШ
По алгоритму: При выгрузке файла сравнивается размер в байтах, если совпадений меньше 3, выводим предупреждение с списком совпадений и кнопкой "Продолжить". Если больше 3 - сравниваем хэш-суму с совпадающими строками из списка, если есть совпадение - выводим предупреждение с ссылкой на дубль икнопкой "отменить", если нетсовпадений - выполнять скрипт заливки дальше.

Приветствуется разумная критика
Может вообще хэш добавить сразу в таблицу с загрузками? (Хотя туту меня несколько вопросов:
В download__files нет поля size, в downloads__more - есть. Хотя из первой таблицы размер файла откуда-то берётся.
Не слишком ли напряжно будет MySQL соединять две полных таблицы (обьем получится большой. например если 100к файлов. и еще 300к дополнительных файлов)
Какие поля в новой таблице надо будет индексировать? я с оптимизацией на ВЫ
Может я много лишнего предлагаю в своем алгоритме? Просто бывает например 2 версии файла, полностью одинаковых по размеру, но с разным MD5. А по сути, это один и тот же файл... Или такого не может быть?
.
Такого не может быть(если только один случай из лярда) Раз хеш одинаковый то хоть как файл переименуй он один и тот же останется. Не давно картинки так переделывал, я те пример скину, а ты сам разбирайся
example (+/-)

Хеш существующих файлов можно записать в таблицу как то так
select `name` /* или ай-ди в зависимости как у тебя файлы на диске названы */ from tbl
while () {
// тут пройти по файлам с $hash = md5_file('path_to_file');
update tbl set hash=$hash where id;
}
.
(\/)____o_O____(\/)
kantry, Ты этот говнокласс используешь для мускула?
Мд5 будет достаточно. Можно ещё и файлы положить по папкам с хэш

https://github.com/Compolomus/ ... orage
.
# Koenig (09.09.2018 / 12:03)
kantry, Ты этот говнокласс используешь для мускула?
goDB что ли, с чего бы он говном то стал?
.
Кадило крутится, лавэха мутится
Просто md5 не рекомендовал бы использовать. Сталкивался с пересечениями даже при количестве файлов в 4к штук.
Комбо вариант используйте. храните 2 хэша md5_file и sha1_file. Так вероятность пересечения будет меньше.
.
ну так накидайте набросок кода для 7го джона, пожалуйста
Всего: 56
Фильтр по автору
Скачать тему