CGIとは? フォームとCGI目次 CGI環境変数

CGIの基礎

プログラミング言語の選択

CGIはプログラム(スクリプト)ですが、とくに難しい知識は必要ありません。一般的にCGIスクリプトを書く場合、次のようなプログラミング言語を用います。

CGIの骨組み

CGIスクリプトの結果は標準出力してHTML文書として表示させるか、サーバ側のファイルに出力するかが考えられます。通常、HTML文書として結果を返すことが多いので、標準出力へ結果を表示します。後者はアンケートのような後で集計が必要な場合に用います。ファイルに書き込んだ場合も無応答より、たとえば「ご協力ありがとうございました」といった何らかの返事を返す方が親切です。

次にCGIスクリプトは最初の出力行に次の3つのうち、いずれかの特別なヘッダを含んでいます。

これらのヘッダの後は必ず空行が必要です。サーバは空行がないと、ヘッダとテキストの境がわからなくなり、処理ができなくなります。この空行は必ず忘れないで下さい。

Content-typeヘッダはブラウザにHTML文書やGIFイメージなどを送る場合に使われ、ブラウザへ入力処理をどのように行なうかを知らせます。たとえばHTML文書を返す場合なら、

	Content-type: text/html
GIFイメージを返す場合なら、
	Content-type: image/gif
このように、すべてのContent-typeはMIME形式で定義されており、ふつう次のContent-typeが使われます。

WWWで使用される主要な
Content-typeヘッダ
フォーマットContent-type
HTML text/html
Text text/plain
GIF image/gif
JPEG image/jpeg
PostScript application/postscript
MPEG video/mpeg


Locationヘッダはサーバ上にある別の文書を開く場合に用いられ、文書はURLで指定します。

	Location: http://www.yokochin.com/index.html
	Location: http://www.w3.org/
	Location: /~yokochin/profile/index.html
たとえば、
	#!/bin/sh
	
	echo Location: http://www.yokochin.com/
	echo
このようなCGIスクリプトを作っておけば、このCGIスクリプトを実行すると自動的にLocationのURL(筆者のWWWサーバ)へ移動します。つまり、以下の<a>(アンカー)タグと同じ機能を果たしますが、クライアント側にはどこへ移動するかわからない点が特徴です。
	<a href="http://www.yokochin.com/">YokochinのWWWサーバへ</a>
たとえば、10個のHTML文書をランダムに表示させたい場合、次のようなCGIスクリプトをPerlで記述します。
	
	
	#!/usr/bin/perl
	
	$unsei=10;
	
	srand(time);
	$number = int(rand($unsei));
	
	print "Location: /technotes/HTML/uranai/unsei$number.html\n\n";
	
	
また、直前の書類へ戻るためのスクリプトなら、CGIスクリプトで利用できる環境変数http_refererは直前のページのURLを示すので、以下のように記述します。ただ、ブラウザによっては送出しないものがあるので注意してください。
	
	
	#!/bin/sh
	
	echo Location: $http_referer
	echo
	
	
最後のStatusヘッダはブラウザへ特別な状態コードを返す場合に用いられます。状態コードはHTTPの仕様で定義されています。たとえば、
	Status: 204 No Response
これはサーバから何も応答がなかったということを意味します。

CGIスクリプトの簡単な記述例

簡単な例として、サーバマシンに誰がログインしているかを表示するwhologinというスクリプトを作成してみましょう。

まずCGIスクリプトを呼ぶためのハイパーリンクを記述します。

	<a href="/cgi-bin">Who login?</a>
これでCGIスクリプトを実行するポインタができました。

次にCGIスクリプトを作る最初の段階として、Content-type(HTML) のヘッダを出力します。

	
	        
	#!/bin/sh
	
	echo "Content-type: text/html"
	echo
	
	
 
前述のとおり、ここで重要なことはヘッダの後に空行を忘れないことです。
 

続いてHTML文書の始まりを記述します。

	
	
	echo "<html><head>"
	echo "<title>Who Login?</title>"
	echo "</head><body>"
	
	
そして、本来の趣旨であるwhologinの本体whoコマンドを記述します。しかし、HTMLが改行などを明示的に記述しなければならないので、正しいフォーマットで表示されません。そのため、whoコマンドを<pre>(整形)タグで囲みます。
	
	
	echo "<pre>"
	who
	echo "</pre>"
	
	
最後にHTMLタグの終了タグで閉じます。
	
	
	echo "</body></html>"
	
	
これで完成です。このスクリプトをchmodコマンドを使って実行ファイルにし、CGIスクリプトの置いてある場所へコピーします。
	% chmod ugo+x whologin
	% cp whologin /usr/local/etc/httpd/cgi-bin/

CGIスクリプトの引数

CGIスクリプトはコマンドやスクリプトを単に実行するだけではなく、引数を持たせて実行できます。引数の表現方法は、スクリプトと引数を疑問符マーク(?)で区切り、個々の引数をプラスマーク(+)で区切ります。

	<a href="/cgi-bin/script?arg1+arg2+arg3+...+argn">
と表します。サーバがスクリプト要求を受け取った時、arg1、arg2、arg3、...argnの引数をスクリプトへ渡します。



Copyright (C) 1996-2003 by Yasukazu Yokoi. All Rights Reserved.