Perl Script Laboratory

CGI環境変数

当サイトのコンテンツをhtmlソースごとそのままコピーして自分のサイトのコンテンツにしてしまう人がいます。そのような行為は当サイトの著作権を侵害する行為ですので絶対にしないでください。発見し次第断固とした措置を取ります。

CGIとは、Common Gateway Interface の略ですが、シェルスクリプトやPerlスクリプトでの入出力の際に共通の(Common)「環境変数」が利用できるという点が、CGIの最大の特徴であると思います。これらの変数は読み出し専用ですが、Perlスクリプトでは %ENV という名前の連想配列(ハッシュ)にあらかじめセットされており、容易に値を参照できます。
なお、この環境変数とは別に「シェル変数」というのもありますので、区別してください。

SSIやCGIでよく使われる環境変数を紹介します。この変数の値を参照してCGIに処理をさせたりすることもできます。ここではとりあえず、 <!--#echo var="VARIABLE_NAME"--> 文で値を表示させながら簡単に変数の内容について説明します。

  • CONTENT_TYPE
    (none)

    データのMIMEコンテンツタイプを示す。image/gifなど。

  • CONTENT_LENGTH
    (none)

    POSTによってデータを標準入力から送る場合、そのデータのバイト数。フォームでMETHOD=postにした場合、フォームデータのバイト数をこの変数の値から知ることができます。フォームデータのデコードをしているPerlスクリプトではこの値を使っているのでソースを見てみてください。

  • GATEWAY_INTERFACE
    CGI/1.1

    サーバが実行しているCGIのバージョン。CGI/1.0、CGI/1.1など。

  • HTTP_ACCEPT
    text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

    ブラウザが直接表示できるContent-typeの一覧。CGIまたはSSIを呼び出したあなたのブラウザの設定を読み出してプログラム(SSIの場合はWebサーバ)に渡します。

  • HTTP_USER_AGENT
    Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.9) Gecko/2009040820 Firefox/3.0.9

    通常はブラウザ名、バージョン名が表示されます。これも、CGIまたはSSIを呼び出したあなたのブラウザの設定を読み出してプログラム(SSIの場合はWebサーバ)に渡します。

  • HTTP_REFERER
    http://www.psl.ne.jp/

    このページを呼び出したリンク元URL。直接入力あるいはブックマークから呼び出した場合はこの変数には何も入りません。

  • QUERY_STRING

    METHOD=getによってフォームデータを送る場合、そのデータの内容。URL指定で「?」の後に来るものすべて。URLエンコードされています。

  • REMOTE_HOST
    (none)

    CGIまたはSSIを呼び出したあなたのマシンのホスト名です。プロバイダのダイヤルアップ接続の場合は、その時接続されているプロバイダ側のサーバ名です。

  • REMOTE_ADDR
    118.8.140.18

    CGIまたはSSIを呼び出したあなたのマシンのIPアドレスです。プロバイダのダイヤルアップ接続の場合は、その時接続されているプロバイダ側のIPアドレスです。

  • REMOTE_USER
    (none)

    認証機能で得たユーザー名。呼び出したページが.htaccessなどでアクセス制限されていて、あらかじめID、パスワードを入力していれば、そのユーザーIDがセットされます。そうでなければなにもセットされません。「Perlスクリプトの部屋」のCommunication Boardなどのシステムではこの値を参照することでメンバーかどうかを調べています。なお、サーバの設定によってはこの変数にセットされない場合もあります。

  • REQUEST_METHOD
    GET

    サーバへの要求方法。通常GETまたはPOST。

  • SCRIPT_FILENAME
    /var/www/vhosts/psl.ne.jp/httpdocs/httpd.shtml

    呼び出したスクリプトの名前。ルートディレクトリ(/)からのフルパスで表示されます。

  • SCRIPT_NAME
    /httpd.shtml

    呼び出したスクリプトの名前。URL(ホスト名を除く)で表示されます。後述するSERVER_NAMEと組み合わせれば完全なURLができます。

  • SERVER_NAME
    www.psl.ne.jp

    呼び出したスクリプトがおいてあるサーバの名前。

  • SERVER_PORT
    80

    呼び出したサーバのポート番号。デフォルトは80。

  • SERVER_PROTOCOL
    HTTP/1.1

    サーバプロトコルの名前およびバージョン。HTTP/1.0、HTTP/1.1など。

  • SERVER_SOFTWARE
    Apache/2.0.52 (Red Hat) mod_perl/1.99_16 Perl/v5.8.5 DAV/2 PHP/4.3.9 mod_python/3.1.3 Python/2.3.4 mod_ssl/2.0.52 OpenSSL/0.9.7a

    呼び出したサーバのソフトウエアの情報がセットされていることがあります。JAHのサーバでは、Apacheのバージョンなどを見ることができます。

  • TZ
    (none)

    呼び出したサーバにセットされているタイム・ゾーン(地方時間帯)。JAHの場合はJapan(JST-9)となっています。時刻を扱うスクリプトを書くときにはこの値をチェックして、必要であれば $ENV{"TZ"} = "JST-9"; などと値を日本標準時にセットしておく必要があります。