Как реализовать проверку файлов при загрузке по хешу?
Всем привет! Вопрос по PHP.
При загрузке файлов на сервер надо реализовать их проверку по хешу, чтобы пользователи не могли загружать повторно одни и те же файлы, пусть и с разными названиями. Вопрос - как это сделать? Я новичок, не могу разобраться.
Можно ли как-то обойти все файлы, которые уже лежат на сервере, и проверить их хеш? Может быть, они автоматически помещаются в какой-то массив и хранятся там?
Можно ли как-то обойти все файлы, которые уже лежат на сервере, и проверить их хеш?
Можно обойти все файлы, имеющиеся на сервере и сохранить их хеши в базу данных.
В дальнейшем вычислять хэш каждого нового файла и так же добавлять в базу.
Перед сохранением проверять наличие хеша в базе.
SmallJun, просто рядом с файликом ложите файл с метой, размер, формат, хэш, прочее, я подобное реализовывал чисто на файлах, можно не сравнивать и не сканить фс, гравное сохраните файл с именем хеша и просто одной проверкой https://www.php.net/manual/ru/function.file-exists.php будете знать о наличии
Открою секрет. Современные облачные хранилища (я проверял AWS S3 и Azure Blob) автоматически генерируют MD5/SHA1 хеши и хранят их рядышком с файлом как object attributes. Там-же хранится дата модификации, mime-type и прочая лабуда. Более того расчет этих атрибутов идет автоматически. Без вашего участия.
Если вы - счастливый обладатель таких облак - то welcome. Если нет - то просто берите идею на вооружение. Или может yandex cloud уже внедрил. По поводу того где хранить. Можно хранить в файловой системе как директорию с md5. Например
Как обойти все файлы и обновить хеш? ХЗ. Наверное в лучше это делать по событию загрузки в PHP.
А для тех файлов что уже загружены - посчитать суммы через утилиту md5sum.
А вот пример того как это уже реализовано (для чтения только) в maven repository с точки зрения HTTP/Rest
Смотрим хедеры файла. И видим аж 2 контрольных хеша. Дальше можно принимать решения по загрузке файла.
Не грузить если таковой уже был.