PHPで画像に使用するユニークな名前を用意する
画像に一意な名前を付けたいと思って、PHPのダミーデータ作成ライブラリのFakerを参考にしてみた。
// Generate a random filename. Use the server address so that a file
// generated at the same time on a different server won't have a collision.
$name = md5(uniqid(empty($_SERVER['SERVER_ADDR']) ? '' : $_SERVER['SERVER_ADDR'], true));
上記はFakerでのダミー画像作成時のファイル名の生成コード。
手順としては下記である。
- $_SERVER['SERVER_ADDR']でサーバーのIPを取得
- それを先頭文字としてuniqid()で一意な文字列を生成
- 一意な文字列をmd5()でハッシュ化
各関数について
uniqid
マイクロ秒単位の現在時刻にもとづいた、接頭辞つきの一意な ID を取得します。
とあるとおり、現在の時刻に基づいて作ってくれるようだ。
md5
入力値をハッシュ化する。
同じ入力であれば同じ値に、少しでも違えば全く違う値が生成されるようになっている。
Fakerでのファイル名生成について
コメントにもあるとおり、同じ時刻に別のサーバーでファイルが生成されたとしても同じ名前にならないようにサーバーのIPをuniqid()の先頭文字として使用して、それをハッシュ化するという手法をとっている。