Правильный способ убедиться, что все файлы имеют уникальные имена? - PullRequest
2 голосов
/ 02 апреля 2011

У меня на сайте есть пользователи, загружающие файлы изображений.

Каковы лучшие / лучшие способы выбора, чтобы убедиться, что не было загружено ни одного файла с тем же именем?

Моя идея заключалась в том, чтобы включить идентификатор члена где-нибудь в имени файла и md5 зашифровать его. Есть другие идеи?

Ответы [ 4 ]

3 голосов
/ 02 апреля 2011

Если вы не беспокоитесь о читаемости / длине имени файла, то самым простым решением, вероятно, будет использование uniqid для генерации "базы" имени файла перед добавлением соответствующего расширения.

(Если вы, вероятно, будете генерировать лотов имен файлов за период менее микросекунды, включите опцию more_entropy.)

0 голосов
/ 24 апреля 2011

просто переименуйте изображение в GUID + расширение изображения

0 голосов
/ 02 апреля 2011

Использование uniqid(), как показано @ Middaparka , будет достаточно безопасным и лучшим способом, если вам не важно, как выглядит имя файла. Крайне маловероятно, что одному и тому же пользователю удастся сделать два одинаковых запроса с одним и тем же файлом за одну и ту же микросекунду.

Если вы хотите сохранить исходные имена файлов (которые приносят - разрешимые, но важные - проблемы с не-ASCII-символами), всегда будет безопаснее постоянно увеличивать счетчик.

1_IMG0085.JPG
2_Lilies_and_pond.JPG
3_Awesome_Party_Pic.JPG

Таким образом, нет вероятности столкновений, но такой счетчик не совсем тривиален для реализации, если вы хотите быть в безопасности гонки.

Вы создаете запись базы данных, когда пользователь загружает изображение? В этом случае вы можете использовать идентификатор из вновь созданной записи в качестве переменной счетчика.

0 голосов
/ 02 апреля 2011

В качестве клуджа вы можете включить текущее время эпохи.Лучшим решением было бы иметь класс Singleton, который выдает номера идентификаторов из увеличенного частного члена данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...