Hatena::ブログ(Diary)

分室の分室 このページをアンテナに追加

2012-04-11 Wed

【224】カレントディレクトリの『インデクスリスト』を html 出力する簡単 CGI

 4.11。今日は良いネタが提供できそう…

 久し振りに Perl(CGI)。 \(f)/

 実は今朝から、既に運用開始している。半日以上経つが、特に問題も無いよう
なので公開してみる。実行例は、こんな感じ(既にお気づきの方もいるかな)。


    http://blue.zero.jp/foussin/cgi/sjis-src/trial-run/js/


 上のリンクをクリックすると、アドレスバーには『 …/index_list.cgi 』 と
表示される。これが今回紹介する CGI です。

ソースコード(sjis):

● ファイル名 (version)
index_list.cgi (v0.11)
● html _top 表示(行番号付)
index_list.cgi(v0.11) のソース
● text _top 表示(browse)(download用)
http://blue.zero.jp/foussin/cgi/stdout_draft.cgi?./sjis_src/index_list.cgi_0.11.txt+plaiN
(ブラウザ画面を右クリックし、index_list.cgi という名前で保存)

			

動作確認

・プロバイダの Webサーバ(UNIX) ・自宅ローカルサーバ(Windows Vista)  共に Apache。コンソールでも動作確認できます。↓
c:\usr\edit\test-bin\index_list_cgi>perl index_list.cgi >test.html c:\usr\edit\test-bin\index_list_cgi>
 警告出ないので、OKってことで。ちなみに、カレント情報は コンソール実行時:Cwd::getcwd() から取得。 CGI として実行時:環境変数『SCRIPT_NAME』から取得。 …としている。

仕様・特徴

● カレントディレクトリの『インデックスリスト』を html 出力する簡単 CGI 名前:index_list.cgi 書式:./index_list.cgi (index.html から呼び出される) 動作条件:CGI なので、CGI パス以外には置けない。 概要:カレントディレクトリ専用 .htaccess の代用として、これを置いておく。 インデックスリストを表示したいディレクトリの中にだけ、個別に置く (.htaccess ではサブディレクトリにも適用されるが、これは違う) …と同時に、index.html に次の記述をしておく。↓ <meta http-equiv="Refresh" content="0; url=./index_list.cgi"> 【参考】↓『とほほの WWW 入門』より
■ 別ページに自動ジャンプするには 別ページにジャンプするには、<head>〜</head> の間に下記の記述を追加して ください。0 を 5 に変更すると、5 秒後に自動ジャンプします。 <meta http-equiv="Refresh" content="0; url=http://www.yahoo.co.jp/">
●『カレントディレクトリ専用』…この仕様は譲れない。  例えば、引数でインデックスリストを表示したいパスを指定できるようにする と便利だが、そうすると、ユーザーに見られちゃ困るディレクトリを覗かれてし まう。 ● index_list.cgi を実行するには、専用の index.html が必要。↓
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <!-- saved from url=(0014)about:internet --> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Refresh" content="0; url=./index_list.cgi"> <title> index.html(dummy) </title> <!-- ./index_list.cgi にジャンプするためのダミー --> </head> <body> <div> </div> </body> </html>
 ま、これで良いだろう。  これをコピペして、index.html という名前で保存し、index_list.cgi と一緒 に放り込んでおけば良い。ただし… 備考:httpd.conf の設定で『index.cgi』が自動読込できる場合、ファイル名を index_list.cgi → index.cgi にリネームすると便利。 この場合は index.html は不要となる(ユーザー設定の編集が必要)。 ● 表示できるファイル名を制限  index_list.cgi は、glob() でカレント情報、ファイル情報を取得する。この 時、取得できるファイル情報を制限する。(拡張子で判断) htm, html, shtml, shtm に一致する拡張子(html 文書) xml に一致する拡張子(xml 文書) txt, text に一致する拡張子(テキスト文書) png, gif, jpeg, jpg に一致する拡張子(画像)  デフォルトとして、上記のファイルのみを対象とする。他は『ユーザー設定』 で追加できるものとする。拡張子のないファイルは表示できない。筆者は lm と いう拡張子のないスクリプトを作っているが、当 CGI では lm は表示できない。  もちろん、 .htaccess のようなドットファイル、ドットディレクトリが表示 されることはない。さらに、index* のファイル名・ディレクトリ名も表示対象 から外した。 ● ユーザー設定  以下の部分(47〜55行)の $charset, @my_ext, $name, $tz を変更できる。 47: #----------------------------------------------------- 48: # ユーザー設定 49: #----------------------------------------------------- 50: # 出力文字コードの決め射ち指定 51: my $charset = "Shift_JIS"; 52: # 表示対象の拡張子を追加 53: my @my_ext = ("mpeg", "mpg", "dic", "mid", "wav"); # ←記述例 54: my $name = "index_list.cgi"; # index.cgi にリネームする場合用 55: my $tz = "JST"; # 表示用文字列  ファイルの置き場所によっては、特別な拡張子のファイルを表示したい場合も ある。その場合は、@my_ext にその拡張子を追記する。つまり、ユーザー設定が 異なる index_list.cgi が複数存在することになる。これは忘れやすいので要注 意だ。  $tz を変えても、ローカル時間(タイムゾーン)を変えることはできません。単 なる『表示用の文字列』です。 ● 使いどころ  表示したいファイルと表示したくないファイルが混在しているディレクトリに この CGI を置いておくと便利。ただし…  筆者のプロバイダでは、 .htaccess と index.html が共存できない設定に なっていて、どちらかを無効にしなければならなかった。そうしないと…『パー ミッション・デニード』となってしまう。説明すると長くなるのでやめておくが、 これはちょっと悩ましい問題だなあ… ● html 文書の <title>〜</title> を表示  これはけっこう便利だった。『シンプルで適切な題名』を付けるモチベーショ ンにも繋がるしね。今までアバウト過ぎた。ちょっと反省… …こんなところかな。あとは、ソースのコメントをご覧ください。

制作のモチベーション

 サンプル置場を作ったのはいいけど、表示があまりにも素っ気無い。↓ f:id:foussin:20120411164712p:image  自家サーバやレンタルサーバなら、直接 httpd.conf を編集し、こういう表示 にできる(ファンシーな表示)。↓ f:id:foussin:20120411165928p:image  これはローカルサーバでの表示。 そこに readme.html があれば、それも取り 込んで表示してくれる。 本当によく出来てる。 一般ユーザーの場合、プロバイ ダ提供の Webサーバを利用することになる。その場合、インデクスを表示したい ディレクトリの最上部に .htaccess を置けば良いのだが、プロバイダの設定の 都合もあって、なかなか思うようには表示できない。  最近、JavaScript をやるようになって、js で html のテーブルを自動生成す る手法を覚えた。これって、CGI にも応用できるな…と思い、早速やってみた。  Apache のインデクスリストも、ソースを見たら table を使っていた。やって ることは似たようなものなんだな、きっと。  最後に…  個人的には、これを頻繁にバージョンアップするつもりはないので、ソースの 置き場所はテキトーです。作者はそんなヤツなので、ご自由に改造してご利用く ださい。もちろん自己責任で。  メインサイトを更新したいとずっと思っているんだけど、その前にツリー構造 を変えたい。どういう構造にするかで、ずっとモヤモヤしてる。今回作った CGI が、ちょっとしたヒントになりそう… おしまい。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/foussin/20120411/1334152763