Code.007 2002年11月25日発行 ■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■ 【 Webプログラミング 】 〜 猫的プログラマーとその軌跡 〜 ■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■ ▼毎週月曜日に配信しています。 ▼等幅フォントでご覧いただくとキレイに見えます。 ▼登録・解除はこちらから可能です。 < http://www.ichikoro.com/webp/ > ※ぜひお友達にもご紹介ください(^^)/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CGI(Perl)基本動作 その7:「モジュールを使う」後編 ────────────────────────────────────── CGIモジュールは非常に規模の大きな物です。 クエリーを取得するだけに止まらず、HTMLをprintなどで記述しなくても、 メソッド(関数)を呼び出すことでWebページが構成できるという機能を備え ています。 全てを覚えて使いこなすのは大変...と言うより、そんなことする必要はも ちろん無いので(^^; よく使う機能だけを説明します。いつもはサンプルの 後に説明するという形ですが、今回は各関数の使い方をダイジェストでお届 けすることにします。 ─────── 呼び出し方 ─────── 前述の通りCGIモジュールは非常に巨大です。 そこで、自分が必要とする機能だけを指定します。 use CGI; #全て読み込まれる use CGI qw(:cgi); #クエリーを取得するのが目的であればコチラで use CGI qw(:standard); #標準的な機能が全て読み込まれる(:cgiも含む) どのメソッド(関数)が呼び出されるか確認したい場合は、CGI.pmのソース中に ある %EXPORT_TAGS をご覧ください。直接エディタで開くか、コマンドライン (DOS窓やtelnet)から perldoc -m CGI と打ってみてください。 ─────── HTTPヘッダ ─────── ○header() header()はその名の通り、HTTPヘッダーを作成します。 #例:1 my $q = new CGI(); print $q->header(); # print "Content-type: text/html\n\n";と同意 print "Hello!"; exit(0); header()への引数に header("image/gif") といった様に自分で MIMEタイプを指定できます。デフォルトは上記の通り "text/html" となります。 またオプションを指定出来ます。 #例:2 my $q = new CGI(); print $q->header( -type => "text/plain", #MIMEタイプ -charset => "Shift_JIS", #文字コードを指定 -expires => "+10y" #10年間有効(キャッシュせよ) ); print "Hello!"; exit(0); expiresにはキャッシュの有効期限を設定できます。 CGIモジュール独自の書式で下記の記号と組み合わせることで +30s なら 30秒後、-5y なら 5年前 といった記述が可能です。 もちろん、Fri, 31-Dec-2030 23:59:59 のような記述もOKです。 s ..... 秒 m ..... 分 h ..... 時間 d ..... 日 M ..... 月 y ..... 年 now ... 今 他にも #HTTPステータス -status => "200 OK"; #Cookieを食わせる -cookie => "maker=honda; expires=Fri, 31-Dec-2030 23:59:59; path=/;", #NPHスクリプトの場合はtrue値 -nph => 1, などのオプションが使用できます。 さらにこの他に追加したい物があれば、 -[ヘッダ名] => 値 として定義できます。 ○redirect() ブラウザを指定したWebページにリダイレクト(ジャンプ)させます。 #例:1 my $q = new CGI(); #指定URLへジャンプ! print $q->redirect("http://www.ichikoro.com/"); #http://から始めること exit(0); ─────── クエリー取得 ─────── ○param() param()は引数や戻り値の形態によって、様々な機能を果たします。 #-------------------------------------------------------# # 例:全てのクエリー名を取得 #-------------------------------------------------------# my $q = new CGI(); #全クエリー名を取得 @names = $q->param(); #引数なし、リストで受け取る #場合は全ての名前を取得 #ヘッダ出力 print $q->header(); #クエリー名を表示 foreach $name ( @names ){ print "$name<BR>\n"; } exit(0); #-------------------------------------------------------# # 例:特定のクエリーを取得 #-------------------------------------------------------# my $q = new CGI(); #値を取得(その1) $value = $q->param("maker"); #値が一つしかない場合 #値を取得(その2) @values = $q->param("shashu"); #同一のクエリー名で、複数の値が #期待される場合(チェックボックスなど) #ヘッダ出力 print $q->header(); #クエリー名と値を表示 print "maker | $value <BR><BR>\n"; #複数の値を表示 $value_join = join(",", @values); #値を全て結合する print "shashu | $value_join <BR>\n"; print "<BR>\n"; exit(0); #-------------------------------------------------------# # 例:特定のパラメーターを削除する #-------------------------------------------------------# my $q = new CGI(); #ヘッダ出力 print $q->header(); #表示(削除前) printf("maker: %s\n", $q->param("maker") ); #-- 削除 --# $q->delete("maker"); # $q->all() とすると全て削除する。 #表示(削除後) printf("maker: %s\n", $q->param("maker") ); exit(0); ─────── まとめ ─────── 今回覚えていただきたいメソッド(関数)はたった3つです。 ・head() HTTPヘッダーの出力 ・location() リダイレクト ・param() クエリー値の取得 これ以外は、あまり頻繁に使う機会がありません(^^; (少なくとも私の場合ですが) ○参考文献 ・CGIモジュール v2.70 http://member.nifty.ne.jp/hippo2000/perltips/Cgi.htm ・とほほのWWW入門 http://tohoho.wakusei.ne.jp/www.htm ─────── 次回予告 ─────── 次回からは、ファイル処理について解説したいと思います。 お楽しみに(^^)/ ─────── 分からない ─────── いまいちよく分からない場合は、以下へれっつらごー。 ・サポートBBS このメルマガ専用のサポート掲示板 http://www.ichikoro.com/webp/bbs/ ・CGIプログラミングML CGIなどWebに関する話題を繰り広げるメーリングリスト このメルマガとは何の関係もありませんので発言時は注意を。 http://www.ichikoro.com/cgi/ml/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 編 集 後 記 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ というわけで見事、大学に合格いたしました! 応援のメールをお送りいただいた皆様、本当にありがとうございました。 元気が出ました。 手続き関係も一通り終わり、後は4月の入学を待つのみです。 思えば9月くらいに思い立ってから大学の決定、願書の出願、受験、お金の工面など スピード感あふれる毎日でした。入学金だけ国民生活金融公庫さんから融資していた だいたのですが、お金を借りるのって大変なのだなと、改めて実感しました。 試験当日、小論文は時間を見誤って最後の方が尻詰まりな文章になり、面接は緊張 したせいかシドロモドロ。頭悪そうな台詞を連呼し、発表日まで不安でたまりませ んでした。ホント、幸運に恵まれていたようです(^^ゞ 幸運はまだもう一つあるのです。 試験当日、夜行バスで広島へ向かいました。 高校のころから、ずっと好きだった子がいました。 卒業後、上京してからもチョクチョク連絡を交わしていましたが、何だかんだで 上手くいかなくなり、ある事情から連絡もとれなくなり数年。ある時、その子が 広島でまだ演劇を続けているという話を聞いたのです。 胸を高鳴らせ、劇場へ向かいました。 ライトを浴びた彼女は、以前よりずっと上手くなっていました。 頑張ってきたんだなぁと思うとともに、いい人に囲まれていたんだろうと ちょっと焼けたりしました。 緞帳が下り、客出しのために出てきた彼女と、少しの間話をしました。 「久しぶり!」と顔を手で覆い、照れた感じでしたが、以前と変わらない屈託の ない笑顔を見せてくれました。ちょっとだけ大人っぽくなっていたように感じ ました。 彼女が元気だったこと。 笑顔を見せてくれたこと。 これだけで、次のステップが踏めそうな気がしました。 これからどうなっていくのか分かりませんが、 今は、この数年間ずっと心の奥でくすぶっていた気持ちが、 少しずつ晴れていくような気がしました。 と、これを書いている時に母校の演劇部が全国大会に出場を決めたと、 もう一つさらに奇跡が舞い込んできました。 う〜ん、人生の転換期っていうのはこんなにも突然ポコポコ奇跡が 起こるものなのでしょうか?(^^; まだしばらくの間、落ち着けそうに ない感じがします。 > ハグリッドの言うとおりだ。 > 来るもんは来る...来たときに受けてたてばいいんだ。 〜 ハリー・ポッターと炎のゴブレット 私の場合は、望んでいるせいでしょうか?(^^ゞ ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 【 Webプログラミング Code Sample 】 発 行 : ichikoro.com 発行責任者 : 勝部 麻季人 < katsube@ichikoro.com > Webサイト : < http://www.ichikoro.com/webp/ > お問い合わせ先 : < mm-webp@ichikoro.com > Powerd by まぐまぐ All Right Reserved, CopyRight(C) 2001 Webプログラミング Code Sample ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■