Study of CGI

環境変数

環境変数とは、コンピュータのプロセスに対して、外部から情報を与えたり設定を行ったりする仕組みのことです。

CGIプログラムでいえば、サーバーがプログラムを起動する際にそれを要求したサーバー情報やIPアドレス、フォームデータなどを環境変数にセットしてプログラムプログラムを起動します。

このセットした値を取り出し利用することで、CGIプログラムはさまざまなバリエーションを持つことができます。


環境変数がなかったら?

環境変数がなかったら、という前提はまずありえない(おそらくプログラムの起動もできないのではないではないでしょうか?)ので、利用できなかった場合はどうなるのか考えて見ます。

まずわかりやすいところで言いますと、フォームや使ったCGIプログラムほとんどだめです。まるで、使えないことはないのですが。使い勝手はよくありません。

掲示板やチャットをはじめとする代表的なプログラムがかなりダメージを受けます。

次に、URL(URI)に?をつけて変数を送ることもできません。つまり、この方法で変数を送り動作を変更するようなことはできません。

記録計のCGIプログラムでも特定のページのカウンターのみを取るのはまだしも、アクセスログをとるようなプログラムは使えなくなります。


環境変数へのアクセス

環境変数は、%$ENVという連想配列に格納されています。

そして、ほしい変数のキーは決まっているので、$ENV{"○○"}という形で望む変数にアクセスすることができます。

環境変数は連想配列ですから、次のようなコードで一覧することができます。

foreach $key (keys %ENV) {
print "$key : $ENV{$key}<br>\n";
}

CGIでよくて変われる環境変数

環境変数には、さまざまなものがありますが、CGIプログラムに使われるようなものはほぼ決まっています。

もちろん、ここで紹介したもの以外にも、さまざまな環境変数がありますので、興味がある方は下記の表を参考に調べてみてください。


主にフォームやURLなどからの要求の際に使われる環境変数

環境変数名 機能
CONTENT_LENGTH POSTによってデータを標準入力から送る場合、そのデータのバイト数。
GATEWAY_INTERFACE サーバで使用しているCGIのバージョン。(多くはCGI/1.1)
HTTP_ACCEPT ブラウザが受信可能なContent-type(MIMEタイプ)一覧。
HTTP_COOKIE クッキー情報を格納。
HTTP_HOST WWWサーバのホスト名(クライアントが認識しているホスト名)。
HTTP_REFERER このページを呼び出したリンク元のURI。直接入力あるいはブックマークから呼び出した場合は空。
HTTP_USER_AGENT CGIのページを要求したWebブラウザの情報。WebブラウザとOSを特定できるような情報を格納。
PATH コマンドを実行する際のサーチパスの一覧。
QUERY_STRING GETメソッドで渡されたフォームパラメータ。URlにおける「?」の後ろの部分を格納。
REMOTE_ADDR ユーザ側のマシンのIPアドレス。ダイヤルアップ接続の場合は、その時接続されているプロバイダ側のIPアドレス。
REMOTE_HOST REMOTE_ADDRに対応するホスト名またはIPアドレス。
REQUEST_METHOD サーバへの要求方法(GETやPOST)。
SCRIPT_NAME 呼び出したCGIプログラム名を、ホスト名を除いたURL。
SERVER_NAME CGIプログラムを実行しているサーバーのホスト名、またはIPアドレスを格納。

主にアクセス解析などで使われる環境変数

環境変数名 機能
DOCUMENT_NAME リクエストされたファイル名。
DOCUMENT_ROOT そのドメイン(ホスト)のサーバ上のディレクトリがフルパスで格納されます。サーバー上の絶対パス。
HTTP_HOST WWWサーバのホスト名(クライアントが認識しているホスト名)。
HTTP_REFERER このページを呼び出したリンク元のURI。直接入力あるいはブックマークから呼び出した場合は空。
HTTP_USER_AGENT OSやブラウザ(ユーザエージェント)の情報。
PATH_INFO CGIのURLの末尾に付加されたパス情報。
PATH_TRANSLATED PATH_INFOに指定されたファイルのサーバー上の実パス名。
REMOTE_ADDR ユーザ側のマシンのIPアドレス。ダイヤルアップ接続の場合は、その時接続されているプロバイダ側のIPアドレス。
REMOTE_HOST REMOTE_ADDRに対応するホスト名またはIPアドレス。
REMOTE_IDENT ブラウザ側のユーザID。
REQUEST_URI クライアントが要求したURL(URI)。

POST、GETで送られた変数

POSTで送られた変数は、標準入力のSTDINから入力され、環境変数の$ENV{'CONTENT_LENGTH'}でその大きさを所得します、GETで送られた変数は環境変数の$ENV{'QUERY_STRING'}に入っています。

非常に大雑把な言い方になりますが、POSTの場合はSTDINを、GETの場合は$ENV{'QUERY_STRING'}を分解して、変数を取り出します。その、取得モードのGETやPOSTなどを判別するには、$ENV{'REMOTE_METHOD'}を使います。

POST、GETによる変数の所得については次回を参考にしてください。(→Form)


環境変数一覧

以下はさまざまな、環境変数の一覧です。すべて網羅しているとも言いがたいですが。

プログラムの際に、上記の変数では物足りないと思ったときは、以下の表を参考にしていろいろ調べてみてください。

なお、この表にあるすべての環境変数が読み出せるとは限りません。

環境変数名 機能
AUTH_TYPE 認証機能を使用すると値が設定される。たとえばBASIC認証を使えば'Basic'という値が入る。
CONTENT_LENGTH POSTによってデータを標準入力から送る場合、そのデータのバイト数。
CONTENT_TYPE ブラウザから送信されたデータのMIMEコンテンツタイプ。
DATE_GMT GMTグリニッジ標準時刻。
DATE_LOCAL ローカル時刻。
DOCUMENT_NAME リクエストされたファイル名
DOCUMENT_PATH_INFO  
DOCUMENT_ROOT そのドメイン(ホスト)のサーバ上のディレクトリがフルパス。サーバー上の絶対パス。
DOCUMENT_URI  
GATEWAY_INTERFACE サーバで使用しているCGIのバージョン。(多くはCGI/1.1)
HTTP_ACCEPT ブラウザが受信可能なContent-type(MIMEタイプ)一覧。
HTTP_ACCEPT_CHARSET  
HTTP_ACCEPT_ENCODING ブラウザが受信可能なエンコードタイプ。
HTTP_ACCEPT_LANGUAGE ブラウザが受信可能な言語タイプ。
HTTP_CACHE_CONTROL キャッシュ制御に関する情報。
HTTP_CACHE_INFO  
HTTP_CLIENT  
HTTP_CLIENT_IP  
HTTP_CONNECTION クライアントとサーバー間の接続のタイプ。
HTTP_COOKIE クッキー情報を格納。
HTTP_EXTENSION  
HTTP_FORWARDED この要求をフォワードしたプロキシサーバーの情報。
HTTP_FROM  
HTTP_HOST WWWサーバのホスト名(クライアントが認識しているホスト名)。
HTTP_IDENT  
HTTP_IF_MODIFIED_SINCE  
HTTP_NAGOTIATE  
HTTP_PRAGMA プラグマ情報
HTTP_PROXY_AUTHORIZATION  
HTTP_PROXY_CONNECTION  
HTTP_REFERER このページを呼び出したリンク元のURI。直接入力あるいはブックマークから呼び出した場合は空。
HTTP_REMOTE_ADDR  
HTTP_REMOTE_HOST  
HTTP_REMOTE_IDENT  
HTTP_REMOTE_USER  
HTTP_UA_COLOR  
HTTP_UA_CPU クライアントのCPU。値をセットするのはクライアント側。
HTTP_UA_OS クライアントのOS。値をセットするのはクライアント側。
HTTP_UA_PIXELS クライアントのブラウザの縦x横のサイズ。値をセットするのはクライアント側。
HTTP_USER_AGENT CGIのページを要求したWebブラウザの情報。WebブラウザとOSを特定できるような情報を格納。
HTTP_VIA  
HTTP_X_FORWARDED_FOR この要求をフォワードしたプロキシサーバーの情報。
HTTP_X_LOCKING  
LAST_MODIFIED  
PATH コマンドを実行する際のサーチパスの一覧。(パスにないディレクトリの下にあるコマンドはフルパスで呼ぶ)
PATH_INFO CGIのURLの末尾に付加されたパス情報。
PATH_TRANSLATED PATH_INFOに指定されたファイルのサーバー上の実パス名。
QUERY_STRING GETメソッドで渡されたフォームパラメータ。URlにおける「?」の後ろの部分を格納。
REDIRECT_STATUS ステータスコード。404とか500など。200は「OK」という意味。
REDIRECT_URL  
REMOTE_ADDR ユーザ側のマシンのIPアドレス。ダイヤルアップ接続の場合は、その時接続されているプロバイダ側のIPアドレス。
REMOTE_HOST REMOTE_ADDRに対応するホスト名またはIPアドレス。
REMOTE_IDENT ブラウザ側のユーザID。
REMOTE_METHOD 取得モード。GETやPOSTなど。
REMOTE_PORT クライアントマシンが通信に使っているポート番号。
REMOTE_USER 実行ユーザー名。.htaccessなどで認証を行っている場合、ユーザーID。
REQUEST_FILENAME  
REQUEST_METHOD サーバへの要求方法(GET、POST、HEAD、PUT、DELETE、LINK、UNLINK)。
REQUEST_URI クライアントが要求したURL(URI)。
SCRIPT_FILENAME 呼び出したCGIプログラム名をサーバ上のフルパス。
SCRIPT_NAME 呼び出したCGIプログラム名を、ホスト名を除いたURL。
SCRIPT_URI  
SCRIPT_URL  
SERVER_ADDR サーバのIPアドレス。
SERVER_ADMIN サーバー管理者情報(メールアドレス)。(httpd.confファイルにセットされたメールアドレス)
SERVER_NAME CGIプログラムを実行しているサーバーのホスト名、またはIPアドレスを格納。
SERVER_PORT WWWサーバがHTTPの通信に使用しているポート番号。(デフォルトは80番)
SERVER_PROTOCOL Webサーバーが実行しているHTTPプロトコルのバージョンを格納。大抵はHTTP/1.0である。
SERVER_ROOT  
SERVER_SIGNATURE WWWサーバーのシグネチャ。エラーページなどでApacheサーバが表示するページのフッタ部分にあたる署名の文字列。
SERVER_SOFTWARE WWWサーバソフト名。
SERVER_VERSION WWWサーババージョン。
TZ 呼び出したサーバにセットされているタイム・ゾーン(地方時間帯)。
UNIQUE_ID  
USER_NAME  

ポイント

  1. 環境変数は連想配列%ENVに格納されます。
HomePage Form

□新着

  • 2016/04/14
    ページ復旧
  • 2007/10/06
    Story Maker始動
  • 2007/06/13
    久々の更新
  • 2007/01/06
    logちょっとバージョンアップ
  • 2006/07/27
    ホームページのPerl 終了

□Topics

  • 2016/04/14
    サイト復旧
  • 2007/10/06
    StoryMaker始動
  • 2007/06/13
    今後にぜひご期待を!
  • 2006/06/26
    今後について
  • 2006/06/15
    環境の変化