環境変数
環境変数とは、コンピュータのプロセスに対して、外部から情報を与えたり設定を行ったりする仕組みのことです。
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 |
ポイント
- 環境変数は連想配列%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
環境の変化