Ответ 1
string uniqid ([ string $prefix [, bool $more_entropy ]] )
Получает префиксный уникальный идентификатор, основанный на текущем времени в микросекундах.
USAGE: $id = uniqid(rand(), true);
Я пытаюсь создать уникальный идентификатор в php, чтобы сохранить загруженный пользователем контент в FS без конфликтов. Я использую php, и на данный момент этот небольшой фрагмент отвечает за создание UID:
$id = tempnam (".", "");
unlink($id);
$id = substr($id, 2);
Этот код является отвратительным: он создает временный файл в FS и удаляет его, сохраняя только соответствующую уникальную часть сгенерированной строки.
Есть ли лучший способ сделать это, наиболее предпочтительно без каких-либо внешних зависимостей?
Спасибо большое!
string uniqid ([ string $prefix [, bool $more_entropy ]] )
Получает префиксный уникальный идентификатор, основанный на текущем времени в микросекундах.
USAGE: $id = uniqid(rand(), true);
Поскольку и uniqid(), и rand() являются функциями, основанными на текущем времени, rand() добавляет почти никакой энтропии, так как время изменит только малую величину между соответствующими вызовами.
Пока вы используете параметр more_entropy
, никогда не должно быть столкновений на одном сервере. Если вы используете кластеризацию, обязательно укажите префикс, который отличается между серверами.
uniqid() - это то, что вы ищете в большинстве практических ситуаций.
Вы можете сделать его еще более "uniq", добавив после него большое случайное число.