SAK 図書館
CGI-Perl 基礎実地編 - 実習7 (リクエスト)
■test07.cgi
------ ↓ ここから ↓ ------
#!/usr/local/bin/perl
#//準備
*data = GetPara();
$a = $data{'a'};
$b = $data{'b'};
#//HTML 出力
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<P>リクエストテスト</P>\n";
print "<P>a = $a</P>\n";
print "<P>b = $b</P>\n";
print "</HTML>\n";
#// 終了
exit(0);
#//=====================================================================
#// パラメタ取得
#//=====================================================================
sub GetPara
{
my($encode) = @_;
my($method) = $ENV{'REQUEST_METHOD'};
local($qu, @in, $key, $val);
#// 日本語コード変換 jcode.pl 読み込み
require 'jcode.pl' if $encode;
#// パラメタ取得
if ($method eq 'GET') {
$qu = $ENV{'QUERY_STRING'};
}
elsif ($method eq 'POST') {
read(STDIN, $qu, $ENV{'CONTENT_LENGTH'});
}
local(@qu) = split(/&/, $qu);
foreach (@qu) {
tr/+/ /;
($key, $val) = split(/=/);
$key =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c', hex($1))/ge;
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack('c', hex($1))/ge;
$val =~ s/\r\n/\n/g;
jcode'convert(*key, $encode) if ($encode);
jcode'convert(*val, $encode) if ($encode);
$in{$key} = $val;
}
#// 戻り値セット
return *in;
}
------ ↑ ここまで ↑ ------
■解説
・この test07.cgi は、単純に実行しても意味がありません。
次のように呼び出します。
test07.cgi?a=para1&b=para2
| |_ 第二パラメタ b にセットするデータ
|_ 第一パラメタ a にセットするデータ
【例】
test07.cgi?a=12345&b=abcdef
test07.cgi?a=あいうえお&b=日本語
・パラメタを指定して呼び出すと、それぞれのパラメタをブラウザに
表示します。実際に CGI-Sever で実行する場合、日本語が化けるかも
しれません。jcode.pl と言うコード変換 pl が必要なのですが、
次の段階で設置することにしましょう。
#//準備
*data = GetPara();
|_ 連想配列(ハッシュ変数) $data にパラメタを受け取ります。
$a = $data{'a'};
|_ 連想配列(ハッシュ変数) $data の a パラメタを $a にセット。
$b = $data{'b'};
|_ 連想配列(ハッシュ変数) $data の b パラメタを $b にセット。
#//=====================================================================
#// パラメタ取得
#//=====================================================================
sub GetPara
|_ 私がいつも使ってる関数です。
まるコピーして下さい。
■補足
・GetPara() は、フォームからのリクエストにも対応しています。
フォームからのリクエストについては、実習8 で説明します。
■実地
・test07.cgi も実際に作成してテストしてみましょう。
■CGI-Perl 基礎実地編資料
■CGI-Perl 基礎編資料
■CGI-Perl 応用実地編資料
■PHP 基礎編資料
■PHP + MySQL 編資料