はじめに
PHPでユニークIDを生成する際に使う uniqid()
関数。時刻ベースでIDを作る仕組みや、$more_entropy
オプションを指定した場合の挙動を正しく理解しておくことは、PHP8上級試験でも重要です。本記事では具体例を交えて、正しい使い方と挙動を解説します。
目次
uniqid() の基本
uniqid(string $prefix = "", bool $more_entropy = false): string
- 目的:ユニークなID(識別子)を生成する
- 引数:
$prefix
:IDの先頭に付加する文字列$more_entropy
:false
(デフォルト):13文字程度の時刻ベースIDtrue
:ドットで区切られたランダム部分が追加され、衝突確率が低くなる
- 戻り値:文字列
実行例
<?php
declare(strict_types=1);
error_reporting(-1);
var_dump(uniqid(more_entropy:true));
var_dump(uniqid(more_entropy:true));
var_dump(uniqid(more_entropy:true));
出力例(実行時刻により変化):
string(23) "68ecf3c9c19b31.79236268"
string(23) "68ecf3c9c19cf6.23450046"
string(23) "68ecf3c9c19d33.23964886"
- ドット前:マイクロ秒ベースの時刻
- ドット後:ランダム性を加えた部分(
$more_entropy = true
の効果)
💡 注意点:uniqid()
は絶対に衝突しないIDではないため、高速で連続生成するとまれに同じIDになることがあります。衝突回避が絶対必要な場合は random_bytes()
なども検討してください。
図解イメージ
uniqid(more_entropy: true)
┌─────────────┬────────────┐
│ 時刻ベース │ ランダム部分 │
└─────────────┴────────────┘
68ecf3c9c19b31.79236268
まとめ
uniqid()
は時刻ベースのユニークIDを生成する$more_entropy = true
でランダム性を追加可能- 実行例の出力は仕様通りで正しい
- 絶対衝突を避けたい場合は
random_bytes()
との併用が有効