Генерация уникального идентификатора в PHP
-
05-07-2019 - |
Вопрос
Я пытаюсь сгенерировать уникальный идентификатор в 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 () - это то, что вы ищете в большинстве практических ситуаций.
Вы можете сделать это еще более "уникальным" добавив большое случайное число после него.