カウンタなどを作成していると、アクセスした人のユーザーを知りたい、プロキシを経由する前のIPアドレスを知りたい、ユーザーのメールアドレスを知りたい・・・など、いろいろな要望があります。しかし、基本的に、CGIは、以下の情報しか得ることができません。この中に自分の欲しい情報があればOK、無ければNGです。#### JavaとCGIを組み合わせてできるみたいですね・・・このページは没。
(1)コマンド引数:CGIをxxx.cgi?arg1+arg2 のように呼び出した際に、arg1, arg2がコマンド引数として渡されます。perlでは$ARGV[0]、$ARGV[1]、...として参照することができます。
for ($i = 0; $i <= $#ARGV; $i++) { print "\$ARGV[$i] = $ARGV[$i]\n"; }(2)環境変数:CGIがどのページから参照されたか、どのIPアドレスから参照されたかの情報は、環境変数に含まれています。環境変数は、サーバーやクライアントの種別によって若干あるもの、ないものがあります。perlで環境変数の一覧を得るには次のようにします。
while (($name, $value) = each(%ENV)) { print "$name = $value\n"; }(3)標準入力からの値:POST形式でCGIを実行した際は、標準入力(STDIN)から、環境変数CONTENT_LENGTHバイト分の情報を読み出せます。ここには、<INPUT TYPE=text>などのフォーム部品に入力された情報が含まれています。
read(STDIN, $buf, $ENV{"CONTENT_LENGTH"}); foreach (split(/&/, $buf)) { ($name, $value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%([0-9A-Fa-f]{2}])/pack("C", hex($1))/eg; print "$name = $value\n"; }(4)クッキー情報:
#!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "CGI情報 \n"; print "\n"; print "====コマンド引数====
\n"; for ($i = 0; $i <= $#ARGV; $i++) { print "\$ARGV[$i] = $ARGV[$i]\n"; } while (($name, $value) = each(%ENV)) { }