トップ画像を、アクセス毎でランダムに変更したい場合などが良くある。その機能を実装したかったので、組んでみた。
ソース
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]までから選ばれれば良いということになる。