• 締切済み

ディレクトリ内のファイル一覧を出力するCGI

以下のような、ディレクトリファイル一覧を出力する スクリプトなんですが、apacheのように ファイル名、時間、ファイルサイズ順に並べ替える機能を 実現させるにはどうすればよいでしょうか? 力不足ですみません、教えて頂けると幸いです。 #!/usr/local/bin/perl opendir(DIR,"."); @item = readdir(DIR); use Cwd qw(getcwd); use File::Basename qw(basename); my $curdirname = basename getcwd(); $out = "<table>\n"; $out .= "<tr><td align=\"center\">ファイル名</td><td align=\"center\">サイズ(byte)</td><td align=\"center\">更新時刻</td></tr>\n"; foreach(@item){ # .か..か*.cgiなら飛ばす (($_ eq '.') or ($_ eq '..') or /\.cgi$/ or /\.htaccess$/ or /\.pl$/ or /\.dat$/) 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 = "<b><font color=\"#FF0000\">ディレクトリ</font></b>"; $_ .= '/' } $year += 1900; #$month += 1; $mon += 1; $weekday += ('日','月','火','水','木','金','土'); ; #$out .= "<tr><td><a href=$_>$_</a></td><td>$size</td><td>$year/$month/$mday $hour:$min:$sec</td></tr>\n"; $out .= "<tr><td><a href=$_>$_</a></td><td align=\"right\">$size</td><td>$year\年$mon\月$mday\日 $hour:$min:$sec</td></tr>\n"; } $out .= "</table>\n"; print <<EOF; Content-type: text/html <html> <body> Index of \/$curdirname $out </body></html> EOF

みんなの回答

  • feininger
  • ベストアンサー率41% (74/180)
回答No.1

並べ替えには sort を使います。 昇順/降順などを指定することもできます。詳細についてはネット上を検索してみてください。 @data = (ccc,aaa,ggg,bbb,zzz); @result = sort @data; print @result; 例えば、更新日時でファイル名を並べ替える場合、 @data = (2003/10/02 20:38:30 aaa.txt,2003/10/02 21:55:22 bbb.txt,・・・) などのように 更新日時+ファイル名 でとりあえずソートして、あとで更新日時とファイル名とに分解するなどいろいろ工夫できます。場合によっては連想配列を利用すると便利なこともあります。

関連するQ&A