【PHP8.x】uniqid関数の使い方
uniqid関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
uniqid関数は、現在時刻に基づいた一意なID(識別子)を生成する関数です。主に、データベースの主キーのような厳密な一意性が必要な場面ではなく、ファイル名、セッションID、一時的な識別子など、簡潔で重複しにくいIDが必要な状況で利用されます。この関数は、現在のマイクロ秒を基にIDを生成するため、非常に高速に動作します。
引数として、オプションでprefixとmore_entropyを受け取ります。prefixは、生成されるIDの先頭に追加される文字列です。これを指定することで、IDの用途を識別しやすくなるだけでなく、IDの一意性をさらに向上させることができます。例えば、異なる種類のIDに異なるプレフィックスを付けることが可能です。
more_entropyをtrueに設定すると、システムの高精度な乱数生成器が用いられ、よりエントロピーの高い(すなわち、より重複しにくい)IDが生成されます。この場合、返されるIDは浮動小数点数を含む文字列となり、より長い形式になります。デフォルトではfalseに設定されており、より短くシンプルなIDが生成されます。
uniqid関数によって生成されるIDは、特定の環境下(例えば、同じマイクロ秒内に何度も関数を呼び出す場合)では重複する可能性がゼロではありませんが、ほとんどの一般的な用途において十分な一意性を提供します。返り値は、生成された一意のIDを表す文字列です。
構文(syntax)
1uniqid(?string $prefix = null, bool $more_entropy = false): string
引数(parameters)
string $prefix = "", bool $more_entropy = false
- string $prefix = "": 生成されるIDの先頭に付加される文字列。デフォルトは空文字列です。
- bool $more_entropy = false: より高いエントロピー(予測不可能性)を持つIDを生成するかどうかを指定するブール値。trueにすると、よりユニークなIDが生成されます。
戻り値(return)
string
ユニークなIDを文字列で生成して返します。
サンプルコード
PHP uniqid 関数の桁数調整
1<?php 2 3/** 4 * uniqid関数の使用例:プレフィックスとエントロピーの調整による桁数の変化. 5 */ 6 7// プレフィックスなし、エントロピーなし(デフォルト) 8$id1 = uniqid(); 9echo "ID 1: " . $id1 . " (Length: " . strlen($id1) . ")\n"; // 例: ID 1: 64b3e0e0d2c86 (Length: 13) 10 11// プレフィックスあり、エントロピーなし 12$id2 = uniqid("prefix_"); 13echo "ID 2: " . $id2 . " (Length: " . strlen($id2) . ")\n"; // 例: ID 2: prefix_64b3e0e0d2c87 (Length: 20) 14 15// プレフィックスなし、エントロピーあり 16$id3 = uniqid("", true); 17echo "ID 3: " . $id3 . " (Length: " . strlen($id3) . ")\n"; // 例: ID 3: 64b3e0e0d2c885.45678901 (Length: 23) 18 19// プレフィックスあり、エントロピーあり 20$id4 = uniqid("prefix_", true); 21echo "ID 4: " . $id4 . " (Length: " . strlen($id4) . ")\n"; // 例: ID 4: prefix_64b3e0e0d2c899.56789012 (Length: 30) 22
PHPのuniqid()関数は、一意なIDを生成するために使用されます。この関数は、文字列型のIDを返し、引数によって生成されるIDの形式を調整できます。
第一引数$prefixは、IDの先頭に付加するプレフィックスを指定する文字列です。プレフィックスを指定することで、生成されるIDの識別性を高めることができます。省略した場合、プレフィックスは付加されません。
第二引数$more_entropyは、より高いエントロピー(予測不可能性)をIDに付加するかどうかを決定するブール値です。trueを指定すると、IDの末尾に小数点と追加のランダムな文字列が付加され、IDの長さが長くなります。false(デフォルト)を指定すると、追加のエントロピーは付加されません。
サンプルコードでは、uniqid()関数を様々な引数の組み合わせで使用し、生成されるIDの長さがどのように変化するかを示しています。プレフィックスの有無や、エントロピーの有無によって、生成されるIDの桁数が変わることを確認できます。
例えば、プレフィックスもエントロピーも指定しない場合、IDの長さは13桁になります。プレフィックスを指定すると、プレフィックスの文字数分だけIDの長さが増加します。エントロピーをtrueに設定すると、IDの末尾にランダムな文字列が付加されるため、IDの長さが大幅に増加します。
uniqid()関数は、データベースのレコードIDや、ファイル名など、一意な識別子が必要な場面で役立ちます。
uniqid()関数は、ユニークなIDを生成する際に便利ですが、いくつか注意点があります。引数$prefixを指定すると、生成されるIDの先頭に指定した文字列が付加されます。これによってIDの桁数が増えます。$more_entropyをtrueにすると、よりランダムな文字列が付加され、IDの桁数が増加します。$more_entropyがtrueの場合、IDに小数点が含まれることがあります。生成されるIDは完全に予測不可能ではありません。セキュリティが重要な場面では、より強固なID生成方法を検討してください。例えば、random_bytes()関数とハッシュ関数を組み合わせるなどが考えられます。