Генерация уникального идентификатора в PHP - PullRequest
15 голосов
/ 08 октября 2008

Я пытаюсь сгенерировать уникальный идентификатор в php, чтобы хранить загруженный пользователем контент на ФС без конфликтов. Я использую php, и на данный момент этот маленький фрагмент отвечает за генерацию UID:

$id = tempnam (".", "");
unlink($id);
$id = substr($id, 2);

Этот код отвратителен: он создает временный файл в FS и удаляет его, сохраняя только соответствующую уникальную часть сгенерированной строки.

Есть ли лучший способ сделать это, наиболее предпочтительно без каких-либо внешних зависимостей?

Большое спасибо!

Ответы [ 3 ]

18 голосов
/ 08 октября 2008
string uniqid ([ string $prefix [, bool $more_entropy ]] )

Получает префиксный уникальный идентификатор на основе текущего времени в микросекундах.

USAGE: $id = uniqid(rand(), true);
9 голосов
/ 26 января 2012

Поскольку функции uniqid () и rand () являются функциями, основанными на текущем времени, rand () практически не добавляет энтропии, поскольку время между соответствующими вызовами изменится лишь на небольшое количество.

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

5 голосов
/ 08 октября 2008

uniqid () - это то, что вы ищете в большинстве практических ситуаций.

Вы можете сделать его еще более уникальным, добавив большое случайное число после него.

...