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 を作ることができます。
さて今回は 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 を作ることができます。

