| CGIの起動方法 |
これが最も簡単な方法で、他の方法のようにHTMLを必要としません。しかし、ユーザにこのURLを入力させるのは現実的とはいえませんので通常は後述の<FORM>タグや<A HREF>タグを使ったHTMLを用意するのが一般的です。CGIのデバッグ時には有効でしょう。
CGIにデータを渡すにはURLに
| http://localhost/cgi-bin/hogehoge.cgi/PathInfo?Name1=Val1&Name2=Val2 |
などと指定できます。
?のあとに名前=値の形式で記述し、複数のパラメタを渡したい場合はさらに&を入れて記述します。このデータは環境変数QUERY_STRINGにセットされてCGIプログラムhogehoge.cgiが呼び出されます。hogehoge.cgiと?の間には「パス情報」と呼ばれるものを入れることもできます。パス情報は環境変数PATH_INFOにセットされます。この方法の場合、リクエストメソッドはGETとなります。リクエストメソッドについては「GET/POSTメソッド」を参照してください。
<HTML> <HEAD> <TITILE>CGIの起動方法(<FORM>タグ)</TITLE> </HEAD> <BODY> <FORM ACTION="/cgi-bin/hogehoge.cgi" METHOD="GET"> 入力1: <INPUT TYPE="text" NAME="Name1" SIZE="32"><BR> 入力2: <INPUT TYPE="text" NAME="Name2" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> </BODY> </HTML> |
この HTML をブラウザに読み込ませると2つのテキスト入力フィールドと、1つの「送信」submitボタンが作成されます。「送信」ボタンを押すとテキスト入力された文字列が、環境変数QUERY_STRINGにセットされてCGIプログラムhogehoge.cgiが呼び出されます。METHOD属性にはもう一つPOSTがあります。詳しくは「GET/POSTメソッド」を参照してください。
<HTML> <HEAD> <TITLE>CGIの起動サンプル(<A HREF>タグ)</TITLE> </HEAD> <BODY> <A HREF="/cgi-bin/hogehoge.cgi?Name1=ABC&Name2=XYZ">送信</A> </BODY> </HTML> |
このHTMLではハイパーリンクされた「送信」をクリックすると、”HTMLの<FORM>タグを使って起動する”のフォームで「入力1:」にABC、「入力2:」にXYZと入力したことと同等になります。URLの指定方法は、「ブラウザでURLにCGIスクリプトを直接入力する」での解説と同じです。
この方法はよくアクセスカウンタなどに使われています。通常は<IMG>タグのSRC属性には、画像ファイルを指定しますが、CGIスクリプトを指定するとCGIの出力で置き換えられます。
ここではCGIスクリプトの内容については触れませんが、"Num=数字"を指定するとその画像を返します。
<HTML> <HEAD> <TITLE>CGIの起動サンプル(<IMG>タグ)</TITLE> </HEAD> <BODY> <IMG SRC="/cgi-bin/number.cgi?Num=1"> <IMG SRC="/cgi-bin/number.cgi?Num=2"> <IMG SRC="/cgi-bin/number.cgi?Num=3"> <IMG SRC="/cgi-bin/number.cgi?Num=4"> <IMG SRC="/cgi-bin/number.cgi?Num=5"> <IMG SRC="/cgi-bin/number.cgi?Num=6"> <IMG SRC="/cgi-bin/number.cgi?Num=7"> <IMG SRC="/cgi-bin/number.cgi?Num=8"> <IMG SRC="/cgi-bin/number.cgi?Num=9"> <IMG SRC="/cgi-bin/number.cgi?Num=0"> </BODY> </HTML> |
#!/usr/bin/perl
#
# number.cgi
#
# (C) Kaoru Fujita
#
use lib './lib';
require 'util.pl';
#
# 定数
#
$type = 'gif';
*data = parseInput();
$number = $in{'Num'};
# イメージファイルのオープン
open(IMG, "images/$number.$type") or
exitError(qq(ファイル $number.$type がオープンできません。));
# Windows のようにバイナリとテキストを区別する場合は
# テキストモードでは \r\n が \n に変換されてしまうのを
# 避ける。UNIX では意味がない。
binmode IMG;
binmode STDOUT;
# イメージの出力
print qq(Content-type: image/$type\n\n);
print while (<IMG>);
# イメージファイルのクローズ
close(IMG);
exit(0);
#-- End of number.cgi
|
<FRAME>タグのSRC属性でCGIを指定することもできます。
<HTML> <HEAD> <TITLE>CGIの起動サンプル(<FRAME>タグ)</TITLE> </HEAD> <FRAMESET ROWS="50%,*"> <FRAME SRC="/cgi-bin/hogehoge.cgi?Name1=ABC&Name2=XYZ"> <FRAME SRC="/cgi-bin/hogehoge.cgi?Name1=123&Name2=789"> </FRAMESET> <BODY> </BODY> </HTML> |
WebサーバでSSI(Server Side Include)が利用できる場合は、CGIの出力をHTML中に埋め込むことができます。よくアクセスカウンタなどに用いられています。
<HTML> <HEAD> <TITLE>CGIの起動サンプル(SSI)</TITLE> </HEAD> <BODY> <!--#exec cmd="hoge.cgi"--> </BODY> </HTML> |
JavaScriptのhrefオブジェクトを使って起動する。
JavaScriptのdocument.location.hrefオブジェクトにCGIスクリプトのURLを指定して起動することができます。この例では、javascript.htmlがロードされるとすぐにCGIを実行して結果が表示されます。
<HTML>
<HEAD>
<TITLE>CGIの起動サンプル(JavaScript)</TITLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function doCGI(url)
{
document.location.href = url;
}
//-->
</SCRIPT>
</HEAD>
<BODY onLoad="doCGI('http://localhost/cgi-bin/hogehoge.cgi?Name1=ABC&Name2=XYZ')">
</BODY>
</HTML>
|