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
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■