CGIに関するQ&A

とほほのWWW入門 > とほほのCGI入門 > CGIに関するQ&A
1999年7月4日版

CGIで○○の情報を取得したいのですが・・・

カウンタなどを作成していると、アクセスした人のユーザーを知りたい、プロキシを経由する前の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)) { }

Copyright (C) 1996-1999 とほほ
http://wakusei.cplaza.ne.jp/twn/wwwcgi4.htm