CGIの基本
CGIの基本はまず次のコードになります。
#!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "test";
1行づつ説明していきます。
STEP1
#!/usr/bin/perl
これは『CGIの解析にPerl言語を使います。』という意味です。
サーバによってPerlの置かれている位置が異なるため、次のような記述をするサーバもあります。
#!/usr/bin/perl
もしあなたがサーバ管理者であれば、どちらでも動作することができるようにシンボリックリンクを張っておくと便利です。
ln -s /usr/local/bin/perl /usr/bin/perl
CGIとはCommon Gateway Interfaceの略で、
『Webサーバが、リクエストに応じて、プログラムを起動するための仕組み』ということなので、CGIから呼び出される言語はPerlでなくてもかまいません。
たとえば次のようにしてPHP言語を動作させることもできます。
#!/usr/local/bin/php <?php echo "Content-type: text/html\n\n"; echo "test";
PHPなどのプログラム言語は、ブラウザから直接PHPファイルを呼び出す方が簡単なのであまりCGIを使うメリットはありません。
またPerlをブラウザから呼び出すにはCGIを通すことになります。
このため入門書などにはCGIとPerlが同じ本に載っていることが多いですが、CGIとPerlは別のものです。
一般的にPerl言語を呼び出すのに使われるものがCGIです。
STEP2
print "Content-type: text/html\n\n";
『 print 』は次に続くものを表示するという命令です。
Content-type: text/html
は、『送られる内容がHTMLです』ということです。
クライアント(ブラウザ)がサーバにアクセスしたときのレスポンス(応答)は、実際には次のようになっています。
HTTP/1.x 200 OK Date: Sat, 03 Oct 2009 17:31:15 GMT Server: Apache/2.2.11 Keep-Alive: timeout=5, max=99 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/html test
HTTPの仕様(決まり)では、『ヘッダー情報とボディー(本文)を、改行をはさんで送信する。』となっています。
CGIでは、HTMLファイルと違い詳細な応答を自分で送信しなければいけません。
ヘッダー情報は、『送信される内容がどんなものか』を説明しています。
[参考記事] Internet Explorerでヘッダー情報を確認する
[参考記事] FireFoxでヘッダー情報を確認する
このContent-Type: text/htmlより前の部分は、指定しなくてもサーバより自動的に送信されます。
たとえば、この行がなかったとするとサーバからの応答は次のようになってしまいます。
HTTP/1.x 200 OK Date: Sat, 03 Oct 2009 17:31:15 GMT Server: Apache/2.2.11 Keep-Alive: timeout=5, max=99 Connection: Keep-Alive Transfer-Encoding: chunked test
本文がないということになってしまうため、CGIでは500エラー(サーバエラー)が表示されます。
この行は、厳密には送られる内容の文字コードも送るのが正しいです。
Shift-JISなら
Content-Type: text/html; charset=shift_jis
EUC-JPなら
Content-Type: text/html; charset=euc-jp
UTF-8なら
Content-Type: text/html; charset=UTF-8
¥nは改行のことです。
1つめはContent-Type: text/htmlの改行、2つめはヘッダーと本文の間の改行です。
STEP3
print "test";
最後は表示内容部分です。
ここはヘッダーでHTMLですといっているのでHTML形式になります。
関連記事
スポンサーリンク