忍者ブログ
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;

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
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スクリプトは動作しません。
サーバーに転送したCGIスクリプトを、通常のHTMLファイルと同様に、例えば次のような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) に変更してください。
カレンダー
04 2025/05 06
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
フリーエリア
Otock!!クーポン
カテゴリー
バーコード
ブログ内検索

Copyright © [ CGIの学び舎 ] All rights reserved.
Special Template : 忍者ブログ de テンプレート
Special Thanks : 忍者ブログ
Commercial message : [PR]