2007年05月31日

ProgrammingTips: CGI を作ろう

こんにちは!はまさんです。

さて今回は CGI の作り方をご紹介しましょう。
CGI とは Common Gateway Interface の略で WEB サーバからプログラムを起動するための仕組みです。
これを使うとプログラムで作った HTML を表示することができます。

CGI の仕様は RFC3875 でまとめられています。
HTML の仕様は W3C でまとめられています。
まずは仕様を正しく把握することが大切です。

CGI の作成には(日本ではあいかわらず) Perl が使われることが多いですね。
Perl は正規表現による文字列の扱いに長けていたため、またインタプリタで手軽に実行できたために CGI 作成のデファクトスタンダードになりました。
しかし Perl は日本語の扱いは苦手なのです。
Perl 5.8 以降 Encode.pm の登場で多少マシになりましたが...、まぁ、よほどの理由が無い限り CGI の作成に Perl を 使わないほうが賢明 でしょう。

CGI はあくまで WEB サーバとプログラムの通信の仕様です。
プログラミング言語は何でも利用できます。

さてさて今回はあえて Perl で CGI を作ってみましょう。
...皆、最初は Perl から入って苦しむんです ;-)

(1) HTTP ヘッダを出力しよう。

まず HTTP ヘッダを出力しなくてはなりません。
これはブラウザがダウンロードしたファイルが何なのか?を判定するためのものです。

↓こんな感じで出力します。

   print "Content-Type: text/html\r\n\r\n";

↓このように文字コードを指定すると文字化けしなくなります。

   print "Content-Type: text/html; charset=UTF-8\r\n\r\n";

(2) HTML を出力しよう。

続いて HTML を 標準出力 に出力します。
この内容がブラウザに表示されます。

   print "<html>...\n";

(3) 入力を解析しよう。

入力は環境変数 QUERY_STRING または 標準入力 から取得できます。
標準入力 の入力の長さは環境変数 CONTENT_LENGTH から取得できます。

   $data = $ENV{'QUERY_STRING'}; # GET の場合
   read(STDIN,$data,$ENV{'CONTENT_LENGTH'}); # POST の場合

入力データは 変数名=値&変数名=値&変数名=値 のように = と & で区切ったフォーマットで入ってます。値は パーセントエンコード (Percent-Encoding) で符号化されています。

いかがでしょう?
CGI の仕組みがなんとなくわかってきたんじゃないでしょうか?

Perl にはこれらの手順をまとめた CGI.pm というモジュールがあります。
これを使うともっと簡単に CGI を作ることができます。


otegaru2han at 12:08 │Comments(0)TrackBack(0) livedoorクリップへ追加このエントリーを含むはてなブックマークこの記事を含むECナビ人気ニュース
サイト制作の素 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

新着情報 機能 価格 ユーザー様の声 FAQ お問合せ スタッフ日記 開発ヒストリー 会社情報 おてがる社長日記
Copyright (C) Vois Inc. All rights reserved