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> |