CGIについて1から書いております
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
CGIスクリプトに渡すデータは、次のような規則にしたがってエンコード(符号化)しなくてはなりません。(フォームの場合はブラウザが自動的にエンコードしてくれます。)これを怠ると、~ が \~ に変換されてしまったり、日本語が化けてしまったりします。
スペースはプラス(+)に置き換える。
特殊文字、日本語などはパーセント(%)に続く2桁の16進数に置き換える。
CGIスクリプトの中では、これを適切な手段でデコードしてやらなくてはなりません。例えば、perlによるCGIスクリプトでは、次のようなコードでデータをデコードします。
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
スペースはプラス(+)に置き換える。
特殊文字、日本語などはパーセント(%)に続く2桁の16進数に置き換える。
CGIスクリプトの中では、これを適切な手段でデコードしてやらなくてはなりません。例えば、perlによるCGIスクリプトでは、次のようなコードでデータをデコードします。
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
PR
CGI スクリプトにパラメータを渡すには以下のような方法があります。
◆ コマンドライン引数で渡す
以下のような形式で CGI スクリプトを呼び出すことにより渡します。引数1、引数2が CGI スクリプトのコマンドライン引数になります。Perl の場合、これらの引数は配列 @ARGV や、環境変数 QUERY_STRING から読み出します。サーバーによっては、環境変数 @ARGV は参照できない場合もあります。
http://...../cgi-bin/xxx.cgi?引数1+引数2
引数に日本語や特殊記号を用いる場合は、適切なエンコードを行う必要があります。エンコード方式は、呼び出し側と CGI 側で整合がとれていれば %nn 形式でも BASE64 形式でもなんでも構いません。
ダブルクォート(")や感嘆符(!)など、引数に、UNIX のシェルで意味を持つ記号が含まれていると、\" や \! のように、バックスラッシュ(\)でエスケープされてしまうことがありますので注意してください。
◆ METHOD=GETで渡す
次のような形式でCGIスクリプトに渡します。CGIスクリプトは、これを環境変数の QUERY_STRING から読み出します。
http://...../cgi-bin/xxx.cgi?名前1=値1&名前2=値2
フォームから METHOD=GET で呼び出した場合も、この形式でデータが渡されます。この場合、記号などは %nn 形式に適切にエンコードされます。
環境変数のサイズには上限があるので、大きなデータを転送する時は METHOD=POST を用います。
◆ URLにスラッシュ(/)をつけて渡す
以下のような形式で CGI スクリプトを呼び出すこともできます。/引数1/引数2 の部分を環境変数 PATH_INFO で読み取ります。
http://...../cgi-bin/xxx.cgi/引数1/引数2
◆ METHOD=POSTで渡す
フォームから METHOD=POST で呼び出した場合は、データはURLではなく、標準入出力で渡されます。CGIスクリプトは、これを環境変数の CONTENT_LENGTH 分、標準入力(STDIN)から読み出します。
http://...../cgi-bin/xxx.cgi
◆ コマンドライン引数で渡す
以下のような形式で CGI スクリプトを呼び出すことにより渡します。引数1、引数2が CGI スクリプトのコマンドライン引数になります。Perl の場合、これらの引数は配列 @ARGV や、環境変数 QUERY_STRING から読み出します。サーバーによっては、環境変数 @ARGV は参照できない場合もあります。
http://...../cgi-bin/xxx.cgi?引数1+引数2
引数に日本語や特殊記号を用いる場合は、適切なエンコードを行う必要があります。エンコード方式は、呼び出し側と CGI 側で整合がとれていれば %nn 形式でも BASE64 形式でもなんでも構いません。
ダブルクォート(")や感嘆符(!)など、引数に、UNIX のシェルで意味を持つ記号が含まれていると、\" や \! のように、バックスラッシュ(\)でエスケープされてしまうことがありますので注意してください。
◆ METHOD=GETで渡す
次のような形式でCGIスクリプトに渡します。CGIスクリプトは、これを環境変数の QUERY_STRING から読み出します。
http://...../cgi-bin/xxx.cgi?名前1=値1&名前2=値2
フォームから METHOD=GET で呼び出した場合も、この形式でデータが渡されます。この場合、記号などは %nn 形式に適切にエンコードされます。
環境変数のサイズには上限があるので、大きなデータを転送する時は METHOD=POST を用います。
◆ URLにスラッシュ(/)をつけて渡す
以下のような形式で CGI スクリプトを呼び出すこともできます。/引数1/引数2 の部分を環境変数 PATH_INFO で読み取ります。
http://...../cgi-bin/xxx.cgi/引数1/引数2
◆ METHOD=POSTで渡す
フォームから METHOD=POST で呼び出した場合は、データはURLではなく、標準入出力で渡されます。CGIスクリプトは、これを環境変数の CONTENT_LENGTH 分、標準入力(STDIN)から読み出します。
http://...../cgi-bin/xxx.cgi
Content-type: TypeName
最もよく使われる形式です。TypeNameにはMIMEタイプと呼ばれる名前を指定します。MIMEタイプには次のようなものがあります。
text/html ... HTML文書
text/plain ... べた文書
image/gif ... GIFファイル
image/jpeg ... JPEGファイル
video/mpeg ... MPEGファイル
通常のテキストを表示する場合は、Microsoft Internet Explorer 3.0では、text/plain をうまく解釈できないことがありますので、text/htmlとしたほうが無難なようです。
Location: UrlName
指定したURLにジャンプします。URLを http:// ではじまる完全URLで指定してください。
(例)
#!/usr/local/bin/perl
print "Location: http://xxx.yyy.zzz/\n";
print "\n";
Status: StatusCode
ブラウザに状態コードを返します。
出力の2行目(正確に言うと、ヘッダ情報が完了した次の行)は必ず空白行にしてください。これを怠ると、CGIスクリプトは動作しません。
最もよく使われる形式です。TypeNameにはMIMEタイプと呼ばれる名前を指定します。MIMEタイプには次のようなものがあります。
text/html ... HTML文書
text/plain ... べた文書
image/gif ... GIFファイル
image/jpeg ... JPEGファイル
video/mpeg ... MPEGファイル
通常のテキストを表示する場合は、Microsoft Internet Explorer 3.0では、text/plain をうまく解釈できないことがありますので、text/htmlとしたほうが無難なようです。
Location: UrlName
指定したURLにジャンプします。URLを http:// ではじまる完全URLで指定してください。
(例)
#!/usr/local/bin/perl
print "Location: http://xxx.yyy.zzz/\n";
print "\n";
Status: StatusCode
ブラウザに状態コードを返します。
出力の2行目(正確に言うと、ヘッダ情報が完了した次の行)は必ず空白行にしてください。これを怠ると、CGIスクリプトは動作しません。
サーバーに転送したCGIスクリプトを、通常のHTMLファイルと同様に、例えば次のようなURLを指定してブラウザから呼び出してください。「これはCGIのテストです。」と表示されれば、設置は完了です。
http://www2e.biglobe.ne.jp/~s-hasei/test1.cgi
#!/usr/local/bin/perl や、print "..." などのCGIスクリプトがそのまま見えてしまう場合は、サーバーがCGIをサポートしていないか、.htaccess ファイルの設置が必要であるなどを意味しています。
サーバー上に設置して、http://~ で始まるURLで呼び出さないとCGIは動作しませんので注意してください。
http://www2e.biglobe.ne.jp/~s-hasei/test1.cgi
#!/usr/local/bin/perl や、print "..." などのCGIスクリプトがそのまま見えてしまう場合は、サーバーがCGIをサポートしていないか、.htaccess ファイルの設置が必要であるなどを意味しています。
サーバー上に設置して、http://~ で始まるURLで呼び出さないとCGIは動作しませんので注意してください。
サーバーがUNIXの場合は(現在は多くのサーバーがUNIXです。)、CGIスクリプトのファイルのパーミッションを変更する必要があります。
CGIスクリプトのパーミッションを 755 (rwxr-xr-x) に変更してください。
CGIスクリプトのパーミッションを 755 (rwxr-xr-x) に変更してください。