指定ディレクトリ内のファイルをランダムに取得

トップ画像を、アクセス毎でランダムに変更したい場合などが良くある。その機能を実装したかったので、組んでみた。

ソース

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]までから選ばれれば良いということになる。

コメントを残す

メールアドレスが公開されることはありません。