Пользователь добавляет картинку на сайт. Я эту картинку добавляю на сервер и в бд. Но как обеспечить уникальность имени картинки, может же быть ситуация когда пользователь отправит картинку с одним и тем же именем и расширением.
Какой из трёх?
Time очевидно не уникальный.
Uuid наоборот избыточный - такие имена файлов по сети гонять трафика не напасешься.
Md5 часто делают от имени, что бессмысленно.
Хотя вообще, если time() добавлять к имени файла, а не переименовывать в него, то при небольшом трафике коллизий должно быть не слишком много
FanatPHP, дело вкуса, конечно.
Просто если пофантазировать, то можно представить перца, который захочет заменить публичную картинку с сайта. Следовательно, он сможет её скачать и иметь у себя. Пробив владельца сайта в гугле, он сможет найти этот тред и понять, как всё устроено. Останется только целенаправленно сгенерировать коллизию для MD5. Но такой перец - это фантастика, скажете вы, и я не буду спорить. Как и сказал выше, выбор алгоритма - дело вкуса. :) А я предложил лишь один из них.
dollar, Если говорить об одном приложении, а не о ситуации где картинками управляет один сервис, а пользуется другой: Не всегда легко "заменить публичную картинку с сайта." посылая картинку, имя которой задублируется с имеющимся файлом.. Программа должна уметь обрабатывать дублирование, в противной случае и коллизий искать не нужно - достаточно послать ту же самую картинку повторно - и что md5_file, что hash_file - будут возвращать уже имеющееся имя файла. Тут все зависит от того, как автор решит обрабатывать случаи дублирования контента. Если решит создавать копию - то следует юзать что-то вроде uniqid, md5 от текущего времени + еще чего-нибудь.. но после всех ухищрений все равно следует прогонять через доп.проверку на существование такого имени. Если существует- повторять попытки раз 5-10 )). Или есть еще вариант: id из своей таблицы с автоинкрементом.
Ну а если для программы допустимо выкинуть пользователю "контент не является уникальным, измените картинку" - то достаточно md5_file.
sdo, угу, как я и говорил - дело вкуса. Если проверять совпадение содержимого файлов в случае совпадение - то и md5 хватит. А вот что делать в случае совпадения - снова дело вкуса. Однако эти рассуждения выходят за рамки вопроса. Поэтому нет смысла спорить о том, что будет достаточно, а что - нет. Сойдёмся на том, что это дело вкуса (и зависит от требований заказчика, ТЗ).