Я пытаюсь разрешить пользователям загружать файлы через сайт PHP.Поскольку все файлы сохраняются в одной папке на сервере, вполне возможно (хотя и с небольшой долей вероятности), что два разных пользователя могут загрузить два файла, которые, хотя и разные, имеют совершенно одинаковые имена.Или, возможно, это один и тот же файл.
В обоих случаях я хотел бы использовать exec("openssl md5 " . $file['upload']['tmp_name'])
для определения хеша MD5 файла сразу после его загрузки.Затем я проверю базу данных на наличие идентичного хэша MD5 и, если он будет найден, я просто не буду завершать загрузку.
Однако в документации move_uploaded_file
я нашел этот комментарий:
Предупреждение. Если вы сохраняете хэш md5_file в базе данных, чтобы хранить записи о загруженных файлах, что полезно для предотвращения загрузки пользователем одного и того же файла дважды, имейте в виду, что после использования move_uploaded_file хеш md5_file изменяется!И вы не можете найти соответствующий хеш и удалить его в базе данных при удалении файла.
Это действительно так? Меняется ли хэш MD5 файла в каталоге tmp после его перемещения в постоянное местоположение? Я не понимаю, почему это так.И независимо от того, существует ли другой, лучший способ гарантировать, что один и тот же файл не загружается в файловую систему несколько раз?