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形式になります。

関連記事

スポンサーリンク

Date.setTime

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る