Добрый день. Имеется база изображений на диске, каждому нужно дать уникальное имя, да так, чтобы без запросов к бд. Задача вполне стандартная, только вот все почему-то пишут про неустойчивость гпсч, про уникальность никто не писал. А для меня вариант, где повторное значение может вылезти с 0.0001% долей вероятности не устраивает. Смотрю доки по поводу функции uniqid:
"Получает уникальный идентификатор с префиксом, основанный на текущем времени в микросекундах. ". И что за время не понятно. Толи в пределах одного дня, то ли с начала 1970.
Поэтому два вопроса:
1. Функция возвращает количество миллисекунд с начала дня, то есть 1000 * 60 * 60 * 24 значений?
2. Возможно ли, если код запускается на неимоверно мощной машине, то два значения могут сгенерироваться в одну и ту же миллисекунду?
Если первое правда, то выходом будет добавить текущий день в качестве префикса и для красоты захешить?
Если второе тоже верно, то выходит нужно добавлять энтропии? Просвятите, пожалуйста. Что-то в последнее время начал уставать от всяких нюансов программирования.
верно, но уникальность названия нужна для того, чтобы при запросе мне не выдало другой файл. А если они одинаковые, то какая мне разница, какая картинка пойдет клиенту? Да и не должно быть одинаковых файлов.
что то я намудрил, вроде. Перепутал бд с диском. Двух одинаковых названий попросту быть не может. Выходит, если при заливке очередной картинки она кажется полным клоном предыдущей, то файл просто перезапишется. Но раз картинки полностью идентичны, то никаких проблем нет.
Что этот метод, что метод, предложенный @7workers одиноково хороши, просто не всегда имеется файл. Что если это токен при покупке через платежную систему?
@FanatPHP Всмысле?) Когда файлов нет, всмысле создается первый файл, то любое имя уникальное. Комментом выше я хотел сказать, что хеш файла, что функция tempnam одинаково хорошо подходят, когда нам нужно уникальное имя файла. Но что если речь о токене, передаваемом для платежной системы? Опиратся не на что и нужно генерировать уникальное значение гпсч, а мне, к сожалению, не дали ответа на 2 первых вопроса.