• ベストアンサー

一覧を表示しCGI経由でファイル表示

またまた質問させていただけないでしょうか? 前回回答して頂いた方法でどうにか中盤まで書けました。有難う御座います。 またつっかかっている部分があります。 あるフォルダーにあるファイル名一覧を表示します。 そのファイル名をクリックするとCGI経由でファイル を開くというものなのですが・・・。 どうも上手くいきません。 流れとしては 1.ディレクトリ「master」の中身一覧を取得 2.それを表示 1.一覧の中のあるファイル名をクリック。 2.[CGI]あるファイルを読み込む。 3.あるファイルを表示。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

#1のそれぞれの説明です。 #自分自身のCGIの名前を設定(自動設定することも可能) $THIS="test.cgi"; #とりあえずファイル名を取得(本来ならもっとちゃんとしたデコーダーを使うといいでしょう) $filename=$ENV{QUERY_STRING}; # ファイルのmime/type をとりあえず指定する。他のタイプも指定する必要がある。 $mime{html}="text/html"; $mime{htm}="text/html"; $mime{txt}="text/plain"; $mime{jpg}="image/jpeg"; # ファイル名が指定されていなければ if($filename eq '') { # ファイル一覧をHTML形式で表示 print "Content-type: text/html\n\n"; print "<html><body>\n"; # ディレクトリを開く、"." を"master"にかえるといいでしょう。 opendir(DIR,"."); # ディレクトリの取得のループ while($dir=readdir(DIR)) { # 実際には、ここでディレクトリかどうか?という判断もすべきです。 # ファイル名へのリンク print "<a href=\"$THIS?$dir\">$dir</a><br>\n"; } # ディレクトリを閉じて終了 closedir(DIR); print "</body></html>\n"; # ファイル名が指定されていなければ } else { #拡張子を取り出す $ext=$filename; $ext=~s/.*\.//g; # 拡張子が$mimeに設定されてれば表示 if($mime{$ext} ne '') { # Content-type: (mime/type)のヘッダを出力 print "Content-type: $mime{$ext}\n\n"; # ファイルの中身をそのままそっくり出力 open(R,$filename); print <R>; close(R); } # (このスクリプトではエラー処理していません) }

その他の回答 (3)

回答No.4

#3 配列にpushすることでできます。 opendir(DIR,"."); while($dir=readdir(DIR)) { # 実際には、ここでディレクトリかどうか?という判断もすべきです。 push(@FILENAMES,$dir); } #ここまで、以下サンプル foreach $file(@FILENAMES) { if($file=~/^a/) { $count{a}++; } if($file=~/^b/) { $count{b}++; } } print "aで始まるファイルの数は$count{a}個ありました\n";

回答No.3

#1,#2と、とりあえず動くサンプルを提示しましたが これはもちろんサンプルであるが故、ディレクトリに対する対処、セキュリティーやエラー処理が全くされていません。 まず、この動くサンプルを理解できてから、次のステップに進むことになると思います。 また、ファイル拡張子に対するmime/typesもどこかからファイルから自動取得したいとかも考えてもみたくありませんでしょうか? 案外、こういうのがダウンロードできたりします。(生のmime-typesはわからないのですが、あるソフトに入っているファイルならわかりますので、それは次回に)

fouhttp
質問者

補足

有難う御座います。 え~とファイル名一覧(リンク付)なのですが 直ぐに表示しないで変数に保存しておくという事は できないでしょうか? 表示しちゃう前に少し使いたいのですが・・・。

回答No.1

1~3どれもできないのでしょうか?汗 2分でこのフローをとりあえず動かせるものを作ってみたのでまずお試しを・・・ #html,htm,txt,jpgしか表示できません #masterの中身ではなく、カレントディレクトリの表示 #ファイル名はtest.cgi #!/usr/bin/perl $THIS="test.cgi"; $filename=$ENV{QUERY_STRING}; $mime{html}="text/html"; $mime{htm}="text/html"; $mime{txt}="text/plain"; $mime{jpg}="image/jpeg"; if($filename eq '') { print "Content-type: text/html\n\n"; print "<html><body>\n"; opendir(DIR,"."); while($dir=readdir(DIR)) { print "<a href=\"$THIS?$dir\">$dir</a><br>\n"; } closedir(DIR); print "</body></html>\n"; } else { $ext=$filename; $ext=~s/.*\.//g; if($mime{$ext} ne '') { print "Content-type: $mime{$ext}\n\n"; open(R,$filename); print <R>; close(R); } }

関連するQ&A