PHPで一意な値を生成する
MySQLのレプリケーションのように、ステートメントベースのレプリケーションの場合には、auto_incrementなどの実行時に値が不定な関数は利用が推奨されません。従って、プログラム側で、一意となる値を生成する必要があります。そのような場合、PHPでは、以下のような「uniqid」という関数が利用できます。
string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
http://php.benscom.com/manual/ja/function.uniqid.php
マイクロ秒単位の現在時刻にもとづいた、接頭辞つきの一意な ID を取得します。
uniqid関数の利用例
以下のように書くことで、$prefixの後に、マイクロ秒単位の現在時刻に基づいた文字列が生成されます。
[root]# php -r 'echo uniqid("PRIMARY_");' PRIMARY_4cc4f4844c2ed
より一意な値とするために
上記の書き方は、あくまで、マイクロ秒単位の違いしかないため、同じ値になる可能性はゼロではありません。
従って、より一意性を高めるために「$prefixを固定文字列ではなく乱数とする」ことを考えます。
[root]# php -r 'echo uniqid(mt_rand());' 5770971284cc4f4b946722
さらに、一意性を高めるために、「第二引数の$more_entropy」を利用します。
TRUE にすると、uniqid() は 返り値の最後にさらに別のエントロピーを (線形合同法を使用して) 追加します。これにより、結果がより一意になります。
http://php.benscom.com/manual/ja/function.uniqid.php
[root]# php -r 'echo uniqid(mt_rand(), true);' 6929848604cc4f53f3ec374.52375463