次のようなスクリプトcgi.arg1を考えてみます。
このスクリプトの中の、echo $1
やecho $2
の、$1,$2
は、スクリプトに与えられた引数を意味しています。
#!/bin/sh echo Content-type: text/html echo echo "<H1>" echo $1 echo "</H1>" echo "<HR>" echo "<H1>" echo $2 echo "</H1>"
コマンドラインから、このスクリプトに、abcとxyzという二つの引数を与えて 起動すると、次のような出力が得られます。
# ./cgi.arg1 abc xyz <---- コマンドラインから実行 Content-type: text/html <H1> abc </H1> <HR> <H1> xyz </H1>
問題は、こうした引数を使うGatewayプログラムに、どの様にして引数を渡す のかということです。
次のように、Gatewayプログラムを呼び出すURLの終わりに、引数を二つつけて オープンしてみて、CGIに引数が渡るかどうか確かめて下さい。
http://lx.wakhok.ac.jp/cgi-bin/cgi.arg1 abc xyz
残念ながら、これではうまくゆきません。
冷静に考えてみれば、オープンに必要なのはURLです。仮想的なファイル名
にあたるURLに引数があるかのような先の書式はちょっと変です。
ただ、表示を良くみると、"<HR>
"に対応する水平線はちゃんと引かれて
いますので、URLの解釈そのものは正しく行われているようです。
実際、URLの解釈は、URLの文字列中に、空白文字が出現した時点で
打ち切られているのです。これでは、空白の後ろの文字列がサーバに
渡るはずがありません。
こうした時、次のようなURLを送ってみて下さい。
http://lx.wakhok.ac.jp/cgi-bin/cgi.arg1?abc+xyz
要するに、Gatewayプログラムを呼び出すURLの後ろに、まず、記号'?'をおいて、 その後に、引数を、記号'+'で区切って渡せばいいのです。