トップ画像を、アクセス毎でランダムに変更したい場合などが良くある。その機能を実装したかったので、組んでみた。
ソース
define("TITLE_IMAGE_DIR", "image/titles/"); function getTitleImage(){ if ($handle = opendir(TITLE_IMAGE_DIR)) { //この関数は論理値 FALSE を返す可能性がありますが、 //FALSE として評価される 0 や "" といった値を返す可能性もあります。 while (false !== ($file = readdir($handle))) { $files[] = $file; } closedir($handle); //画像へのパスを返す(ここらへんは柔軟に変更すること) return TITLE_IMAGE_DIR . $files[rand(2, count($files) - 1)]; } }
解説
while (false !== ($file = readdir($handle)))
これは、phpのマニュアル参照とのこと。型自動判別のphpだからこそ、はまる可能性のあるところだといえる。
$files[rand(2, count($files) - 1)]
readdir()で取得してくるファイルは、カレントディレクトリと親ディレクトリも含まれる点に注意。readdirは、マニュアルに書いてある通り、ファイルシステム上に格納されている順番で返されるから、添え字0と添え字1に、それぞれ格納されることが明白である。つまり、それらを除いた、[count – 1]までから選ばれれば良いということになる。