• 締切済み

指定のフォルダに指定のファイルがあったら画像を表示、なければ飛ばすいい方法(CGI)

指定のフォルダに指定のファイルがあったら画像を表示、なければ飛ばすというようにしたいのです。 opendir (FOLDER,"img"); @FOLDERS = readdir (FOLDER); closedir(FOLDER); my ($cnt) = 0; foreach(@FOLDERS) { if ($_ =~ /.+\..+/) { $cnt++; } } $tate = $cnt/10; print "<TABLE CELLSPACING=0 CELLPADDING=2>\n"; print "<TR>\n"; for($i=1;$i<11;){ for($n=2;$n<$cnt;$n++){ $F = $FOLDERS[$n]; if("$i.jpg" eq "$F"){ print "<TD CLASS=TD1><IMG SRC='img/$i.jpg' HEIGHT=65 WIDTH=50><BR>$i</TD>\n"; $i=$i+1; } #if } #for $n } #for $i というようにしてみたのですが時間がかかりすぎてしまいます。 何かいい方法はないでしょうか?

みんなの回答

  • so_blue
  • ベストアンサー率48% (50/104)
回答No.3

全く未テストですが、こういうのは? print "<TABLE CELLSPACING=0 CELLPADDING=2>\n"; print "<TR>\n"; for($i=1;$i<11;){ for($n=2;$n<$cnt;$n++){ my $hoge = './img/' . $n . '.jpg'; if (-e "$hoge"){ print "<TD CLASS=TD1><IMG SRC='$hoge' HEIGHT=65 WIDTH=50><BR>$n</TD>\n"; } $i=$i+1; } #for $n } #for $i

参考URL:
http://tohoho.wakusei.ne.jp/wwwperl1.htm#FileTest
  • the845t
  • ベストアンサー率33% (246/743)
回答No.2

例えば、 #!/usr/local/bin/perl opendir (FOLDER,"img"); @FOLDERS = readdir (FOLDER); closedir(FOLDER); print "<table>\n"; print "<tr>"; foreach(@FOLDERS) { if ($_ =~ /\d+\.jpg/) { print "<img src=\"img/$_\" />"; } } print "</tr>\n"; print "</table>"; とかじゃダメなの?

KODAMAR
質問者

お礼

やりたいことは以下のようなことです。 会員番号1の人の文字データと画像をリンクさせたい。 文字側からのリンクはうまくいきましたが、「顔は思い出せるけど名前がわからない」という場合に備えて顔の一覧をつくりたいのです。 人数がたくさんいるため、横10列までとし、行はファイル数/10の計算で出したものにします。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

テーブル作成する前に、画像があるかどうか確認して、 画像があれば、それを配列に入れておいて、 foreachで吐き出しては? $n=2や$tateは意味不明ですが・・・。 また、画像が0~10.jpgまでしか無いようであれば、 フォルダから確認する作業の所で配列に入れたほうが良いかも。 $i = $i + 1; は $i++; としたほうが早いかと。

関連するQ&A

専門家に質問してみよう