とあるエンジニアの闇歴史帳

コピペで使える便利Wiki ※現在構築中です。

ユーザ用ツール


webp:vol52

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

webp:vol52 [2020/06/23 14:10] (現在)
行 1: 行 1:
 +====== Code.007 CGI(Perl)基本動作 その7:「モジュールを使う」後編 ======
 +<html><pre style="font-family:monospace; font-size:10pt">
 +   Code.007                                                 2002年11月25日発行
 +■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■
 +                           【 Webプログラミング 】
  
 +                       〜 猫的プログラマーとその軌跡 〜
 +■━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━■
 +
 +              ▼毎週月曜日に配信しています。
 +              ▼等幅フォントでご覧いただくとキレイに見えます。
 +              ▼登録・解除はこちらから可能です。
 +                &lt; http://www.ichikoro.com/webp/ &gt;
 +                  ※ぜひお友達にもご紹介ください(^^)/
 +
 +━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 + 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-&gt;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-&gt;header( -type     =&gt; "text/plain",   #MIMEタイプ
 +                              -charset  =&gt; "Shift_JIS",    #文字コードを指定
 +                              -expires  =&gt; "+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 =&gt; "200 OK";
 +
 +        #Cookieを食わせる
 +        -cookie =&gt; "maker=honda; expires=Fri, 31-Dec-2030 23:59:59; path=/;",
 +
 +        #NPHスクリプトの場合はtrue値
 +        -nph    =&gt; 1,
 +
 +    などのオプションが使用できます。
 +    さらにこの他に追加したい物があれば、
 +
 +        -[ヘッダ名] =&gt; 値
 +
 +    として定義できます。
 +
 +
 +○redirect()
 +    ブラウザを指定したWebページにリダイレクト(ジャンプ)させます。
 +
 +        #例:1
 +
 +            my $q = new CGI();
 +
 +            #指定URLへジャンプ!
 +            print $q-&gt;redirect("http://www.ichikoro.com/");  #http://から始めること
 +
 +            exit(0);
 +
 +
 +───────
 + クエリー取得
 +───────
 +○param()
 +    param()は引数や戻り値の形態によって、様々な機能を果たします。
 +
 +        #-------------------------------------------------------#
 +        # 例:全てのクエリー名を取得
 +        #-------------------------------------------------------#
 +
 +            my $q = new CGI();
 +            
 +            #全クエリー名を取得
 +            @names = $q-&gt;param();       #引数なし、リストで受け取る
 +                                        #場合は全ての名前を取得
 +
 +            #ヘッダ出力
 +            print $q-&gt;header();
 +
 +            #クエリー名を表示
 +            foreach $name ( @names ){
 +                print "$name&lt;BR&gt;\n";
 +            }
 +
 +            exit(0);
 +
 +
 +        #-------------------------------------------------------#
 +        # 例:特定のクエリーを取得
 +        #-------------------------------------------------------#
 +
 +            my $q = new CGI();
 +
 +            #値を取得(その1)
 +            $value  = $q-&gt;param("maker");       #値が一つしかない場合
 +
 +            #値を取得(その2)
 +            @values = $q-&gt;param("shashu");      #同一のクエリー名で、複数の値が
 +                                                #期待される場合(チェックボックスなど)
 +
 +            #ヘッダ出力
 +            print $q-&gt;header();
 +
 +            #クエリー名と値を表示
 +            print "maker | $value  &lt;BR&gt;&lt;BR&gt;\n";
 +
 +            #複数の値を表示
 +            $value_join = join(",", @values);   #値を全て結合する
 +
 +            print "shashu | $value_join &lt;BR&gt;\n";
 +            print "&lt;BR&gt;\n";
 +
 +
 +            exit(0);
 +
 +
 +        #-------------------------------------------------------#
 +        # 例:特定のパラメーターを削除する
 +        #-------------------------------------------------------#
 +            my $q = new CGI();
 +
 +            #ヘッダ出力
 +            print $q-&gt;header();
 +
 +            #表示(削除前)
 +            printf("maker: %s\n", $q-&gt;param("maker") );
 +
 +            #-- 削除 --#
 +            $q-&gt;delete("maker");        # $q-&gt;all() とすると全て削除する。
 +
 +            #表示(削除後)
 +            printf("maker: %s\n", $q-&gt;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月くらいに思い立ってから大学の決定、願書の出願、受験、お金の工面など
 +スピード感あふれる毎日でした。入学金だけ国民生活金融公庫さんから融資していた
 +だいたのですが、お金を借りるのって大変なのだなと、改めて実感しました。
 +
 +試験当日、小論文は時間を見誤って最後の方が尻詰まりな文章になり、面接は緊張
 +したせいかシドロモドロ。頭悪そうな台詞を連呼し、発表日まで不安でたまりませ
 +んでした。ホント、幸運に恵まれていたようです(^^ゞ
 +
 +
 +
 +幸運はまだもう一つあるのです。
 +試験当日、夜行バスで広島へ向かいました。
 +
 +高校のころから、ずっと好きだった子がいました。
 +卒業後、上京してからもチョクチョク連絡を交わしていましたが、何だかんだで
 +上手くいかなくなり、ある事情から連絡もとれなくなり数年。ある時、その子が
 +広島でまだ演劇を続けているという話を聞いたのです。
 +
 +胸を高鳴らせ、劇場へ向かいました。
 +ライトを浴びた彼女は、以前よりずっと上手くなっていました。
 +頑張ってきたんだなぁと思うとともに、いい人に囲まれていたんだろうと
 +ちょっと焼けたりしました。
 +
 +緞帳が下り、客出しのために出てきた彼女と、少しの間話をしました。
 +「久しぶり!」と顔を手で覆い、照れた感じでしたが、以前と変わらない屈託の
 +ない笑顔を見せてくれました。ちょっとだけ大人っぽくなっていたように感じ
 +ました。
 +
 +
 +彼女が元気だったこと。
 +笑顔を見せてくれたこと。
 +これだけで、次のステップが踏めそうな気がしました。
 +
 +これからどうなっていくのか分かりませんが、
 +今は、この数年間ずっと心の奥でくすぶっていた気持ちが、
 +少しずつ晴れていくような気がしました。
 +
 +
 +と、これを書いている時に母校の演劇部が全国大会に出場を決めたと、
 +もう一つさらに奇跡が舞い込んできました。
 +
 +
 +う〜ん、人生の転換期っていうのはこんなにも突然ポコポコ奇跡が
 +起こるものなのでしょうか?(^^; まだしばらくの間、落ち着けそうに
 +ない感じがします。
 +
 +
 +&gt;   ハグリッドの言うとおりだ。
 +&gt;   来るもんは来る...来たときに受けてたてばいいんだ。
 +                                      〜 ハリー・ポッターと炎のゴブレット
 +
 +
 +私の場合は、望んでいるせいでしょうか?(^^ゞ
 +
 +■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 +
 +                   【 Webプログラミング Code Sample 】
 +
 +                    発  行 : ichikoro.com
 +                発行責任者 : 勝部 麻季人
 +                              &lt; mailto:katsube@ichikoro.com &gt;
 +                 Webサイト : &lt; http://www.ichikoro.com/webp/ &gt;
 +            お問い合わせ先 : &lt; mailto:mm-webp@ichikoro.com &gt;
 +
 +                            Powerd by まぐまぐ
 +    All Right Reserved, CopyRight(C) 2001 Webプログラミング Code Sample
 +■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 +</pre></html>

関連ページ

webp/vol52.txt · 最終更新: 2020/06/23 14:10 (外部編集)