いがにんのぼやき

若手WEBエンジニアのブログ。IT、WEB、バンド、アニメ。

PHPで画像に使用するユニークな名前を用意する

画像に一意な名前を付けたいと思って、PHPのダミーデータ作成ライブラリのFakerを参考にしてみた。

github.com

// 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でのダミー画像作成時のファイル名の生成コード。
手順としては下記である。

  1. $_SERVER['SERVER_ADDR']でサーバーのIPを取得
  2. それを先頭文字としてuniqid()で一意な文字列を生成
  3. 一意な文字列をmd5()でハッシュ化

各関数について

uniqid

PHP: uniqid - Manual

マイクロ秒単位の現在時刻にもとづいた、接頭辞つきの一意な ID を取得します。

とあるとおり、現在の時刻に基づいて作ってくれるようだ。

md5

PHP: md5 - Manual

入力値をハッシュ化する。
同じ入力であれば同じ値に、少しでも違えば全く違う値が生成されるようになっている。

Fakerでのファイル名生成について

コメントにもあるとおり、同じ時刻に別のサーバーでファイルが生成されたとしても同じ名前にならないようにサーバーのIPをuniqid()の先頭文字として使用して、それをハッシュ化するという手法をとっている。