- 締切済み
フォルダー内を表示させるcgi
ディレクトリにindex.html等がないときに 中にあるファイルが一覧で出力される、apacheのような機能の付いた cgiを使っているのですが、 -------------- 始まり #!/usr/local/bin/perl opendir(DIR,"./"); @item = readdir(DIR); $out = ""; foreach $file (@item){ $out .= "<a href=$file>$file</a>\n"; } print <<EOF; Content-type: text/html <html> <head> <title>All Files</title> </head> <body> <pre> $out </pre></body></html> EOF -------------------終わり 特定の拡張子ファイルだけを出力しないようにするにはどうしたらいいでしょうか?(例えば、.cgiなど。上位ディレクトリに登る「.」「..」も出さない) ディレクトリやファイルを判別して表示を変えたり、ファイルサイズや ファイルが置かれた、更新された時間も表示するようにしたいです。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nipotan
- ベストアンサー率59% (134/227)
> ローカルで実行してみたところ、ファイルの更新時間の取得がうまくいかないようです。 私が答えるべきでは無いんでしょうけど > # 更新時刻変換 > ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($mtime); この部分の、$mon を $month に書き換えてやってください。 (use strict しないと、この手のミスは見つけにくい…) ちなみに、stat で mtime しか使わないなら my $mtime = (stat)[9]; にするとかしたほうが、余計にメモリを食わないでいいと思います。
- haporun
- ベストアンサー率40% (230/562)
#!/usr/local/bin/perl opendir(DIR,"."); @item = readdir(DIR); $out = "<table>\n"; $out .= "<tr><td>名前</td><td>サイズ</td><td>時刻</td></tr>\n"; foreach(@item){ # .か..か*.cgiなら飛ばす (($_ eq '.') or ($_ eq '..') or /\.cgi$/) and next; # ファイルの情報 ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($_); # 更新時刻変換 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($mtime); if(-d $_){ $size = "DIR"; $_ .= '/' } $year += 1900; $month += 1; $out .= "<tr><td><a href=$_>$_</a></td><td>$size</td><td>$year/$month/$mday $hour:$min:$sec</td></tr>\n"; } $out .= "</table>\n"; print <<EOF; Content-type: text/html <html> <head> <title>All Files</title> </head> <body> <pre> $out </pre></body></html> EOF 暇だから全部書いちゃった(悪。 以前のと見比べて勉強してくださいね(笑。
補足
有り難う御座います。さっそく知識を吸収させて頂いてます。 ローカルで実行してみたところ、ファイルの更新時間の取得がうまくいかないようです。 4つファイルがあるとすると、上から日付が1月、2月、3月、4月となってしまいます。 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($mtime); をいろいろいじったのですが、今度は1970年付になってしまいました(T_T) あと、$out .= "<tr><td>名前</td><td>サイズ</td><td>時刻</td></tr>\n"; の所にリンクを貼って、クリックすると、ファイルをaからの順に並べる サイズの所をクリックするとサイズの小さい、大きい順に並ぶ、 みたいなことは可能なのでしょうか?