フォルダに存在する画像を全て読み込んで1画面に表示させたい。
マスタテーブルの各データに紐付くデータだから
マスタテーブルの一覧から紐付けて引っ張るのが一番良いのだけど、
まだno imageのものがあるので、
全てパスを記載してしまうと画像がないものも出力されてしまう。。
なので純粋にディレクトリの中に存在する画像だけ
全て呼び出したい。
■案1
最終的に呼び出すべき全一覧はマスタテーブルにあるので、
その一覧の
ファイルをひとつずつ、画像有無チェックして、
あるものだけ出す。
↓
なんとファイルの有無を調べる関数
is_readable
があったので使用したら良いのではと。
(file_exists でもよいのかな。でもis_readableは有無+読み込み可能かチェックしてくれるので)
でもこれだとなんだかすごい重そうだし無駄な作業をしている感があり。。
一つ一つ、ディレクトリの中から画像の有無を洗って出すなんて、
コンピューターならなんて事ないのかもしれないけど
ちょっとしっくりこない。
■案2
該当フォルダ内の画像一覧を取得して、
表示させる。
↓
これのほうがスマートでは!?
PHPってなんでもできるんだな。。
(というか自分がまだ初歩的なことしかやってないのか)
画像名をマスタに紐付くIDにしておけば。リンクも繋げられる。
最初に見つけたのは
glob関数
PHPのglob()がすっごい便利だった件 | IDEA*IDEA
foreach (glob(“*.jpg”) as $filename) {
echo ‘<img src=”‘ . $filename . ‘” alt=”‘ . $filename . ‘” />’;
}
たしかに活躍の幅は広そう。拡張子限定できるし。
でも今回に限っては、パスまで取れてきて、どうしようと思って他にも探した。
(後から思ったのだけど、パスは取ればよい)
readdir関数
これだと、ディレクトリを指定して開いてからファイル名取得する感じ。
ちょっと難しそうだけど下記が分かりやすかったです。
ディレクトリ内のファイル一覧を取得する
// 対象のディレクトリ
$target_dir=”./”;
// ディレクトリの存在を確認
if(!is_dir($target_dir) && !is_link($target_dir)){
echo “指定されたフォルダがありません。”;
exit;
}
// ディレクトリハンドルを開く
if (!($dh = @opendir($target_dir))) {
echo “フォルダ情報の取得に失敗しました。”;
exit;
}
//ディレクトリ内のファイル名を1つづつ取得
while ($file = readdir($dh)) {
if ($file == “.” || $file == “..”) continue;
echo $file.”\n”;
}
// ディレクトリハンドルを閉じる
closedir($dh);
?>
これで$fileに、ファイル名が変数として入った
あとは<img src=”画像名”>に入れて繰り返すだけですね。
デザインがはまってなんだかイメージ通りになったときにちょっと泣きそうになったわ。—–
コメント