PHP マニュアル
前のページ | 付録 K. 予約語の一覧 | 次のページ

# 定義済の変数

PHP 4.1.0 以降、 外部から来る変数 を取得するのに推奨される方法は以下に述べるスーパーグローバルを 用いることです。それまでは、 register_globals または定義済みの PHP 配列(`$HTTP_*_VARS`)に 依存していました。 PHP 5.0.0 以降、PHP の長い 定義済みの変数 配列は register_long_arrays ディレクティブにより無効にすることができます。

## サーバ変数: `$_SERVER`

> 注意: 4.1.0 で導入されました。これ以前のバージョンでは、 `$HTTP_SERVER_VARS` を使用してください。

`$_SERVER` は、ヘッダ、パス、スクリプトの位置のような 情報を有する配列です。この配列のエントリは、Web サーバにより 生成されます。全ての Web サーバがこれら全てを提供する保障はありません。 サーバは、これらのいくつかを省略したり、この一覧にない他のものを 定義する可能性があります。これらの変数の多くは、 CGI 1.1 specification で定義されています。したがって、これらについては定義されていることを 期待することができます。

これは、'スーパーグローバル(superglobal)'、または自動グローバル (automatic global)、変数です。これは、スクリプトの全てのスコープで 利用可能であることを意味します。関数やメソッドの中からこの変数に アクセスする際に `$HTTP_SERVER_VARS` のように global $_SERVER; とする必要はありません。

`$HTTP_SERVER_VARS` の最初の情報は同じですが、 autoglobal ではありません (`HTTP_SERVER_VARS` と `$_SERVER` は異なる変数であり、 PHP は異なる変数として処理を行うことに注意してください)。

register_globals ディレクティブを設定した場合、これらの変数は、スクリプトの グローバルスコープ、つまり配列 `$_SERVER` 及び `$HTTP_SERVER_VARS` 以外のグローバル変数として 利用可能となります。関連情報については、 register_globals の使用法 という名前のセキュリティに関する章を参照ください。 これらの各グローバル変数は、自動グローバルではありません。

以下の各要素のいくつかは $_SERVER に現れない可能性があります。PHP をコマンドラインで実行している場合には、 使用できるものは僅かであることに注意してください。

'`PHP_SELF`'

  現在実行しているスクリプトのファイル名です。 ドキュメントルートから取得されます。 例えば、`http://example.com/test.php/foo.bar` というアドレス上にあるスクリプトでは `$_SERVER['PHP_SELF']` は `/test.php/foo.bar` となります。 __FILE__ 定数 には、カレント(すなわち読み込まれた)ファイルのパスとファイル名が含まれます。

  PHP がコマンドラインから実行される場合、PHP 4.3.0 以降、 この変数にはスクリプト名が含まれます。これより前のバージョンでは、 この変数は使用できません。

'`argv`'

  スクリプトに渡された引数の配列です。スクリプトがコマンドラインから 実行された場合、C 言語スタイルでコマンドライン引数に アクセスすることができます。GET メソッドを通してコールされた場合には 検索引数が格納されます。

'`argc`'

  スクリプトに渡された引数の数が格納されます （コマンドライン上で実行された場合）。

'`GATEWAY_INTERFACE`'

  サーバが使用している CGI のバージョンです。 例 '`CGI/1.1`'

'`SERVER_ADDR`'

  現在のスクリプトが実行されているサーバの IP アドレスです。

'`SERVER_NAME`'

  現在のスクリプトが実行されているサーバのホスト名です。 スクリプトがバーチャルホスト上で実行されている場合は そのバーチャルホスト名となります。

'`SERVER_SOFTWARE`'

  レスポンスヘッダ上に書かれている、 サーバの認識文字列です。

'`SERVER_PROTOCOL`'

  ページがリクエストされた際のプロトコル名とバージョンです。 例.'`HTTP/1.0`'

'`REQUEST_METHOD`'

  ページにアクセスする際に使用されたリクエストのメソッド名です。 '`GET`', '`HEAD`', '`POST`', '`PUT`' など。

  > 注意: リクエストのメソッドが `HEAD` だった場合、 PHP スクリプトはヘッダを送信した後（言い換えれば、 出力バッファリングを行わずに全出力を処理した後）に終了します。

'`REQUEST_TIME`'

  リクエストの開始時のタイムスタンプ。PHP 5.1.0 以降で利用可能。

'`QUERY_STRING`'

  ページがアクセスされた際にもし検索引数があればそれが格納されます。

'`DOCUMENT_ROOT`'

  現在実行されているスクリプトが存在するドキュメントルート ディレクトリです。サーバのコンフィグレーションファイルで 定義されています。

'`HTTP_ACCEPT`'

  現在のリクエストの `Accept:` ヘッダがもしあれば その内容。

'`HTTP_ACCEPT_CHARSET`'

  現在のリクエストの `Accept-Charset:` ヘッダが もしあればその内容。例: '`iso-8859-1,*,utf-8`'

'`HTTP_ACCEPT_ENCODING`'

  現在のリクエストに `Accept-Encoding:` ヘッダが もしあればその内容。例: '`gzip`'

'`HTTP_ACCEPT_LANGUAGE`'

  現在のリクエストに `Accept-Language:` ヘッダが もしあればその内容。例: '`en`'

'`HTTP_CONNECTION`'

  現在のリクエストに `Connection:` ヘッダが もしあればその内容。例: '`Keep-Alive`'

'`HTTP_HOST`'

  現在のリクエストに `Host:` ヘッダが もしあればその内容。

'`HTTP_REFERER`'

  現在のページに遷移する前にユーザエージェントが参照していた ページのアドレス（もしあれば）。これはユーザエージェントに よってセットされます。全てのユーザエージェントが これをセットしているわけではなく、また、`HTTP_REFERER` を変更する機能を持つものもああります。 要するに、信頼するべきものではありません。

'`HTTP_USER_AGENT`'

  現在のリクエストに `User-Agent:` ヘッダが もしあればその内容。ページにアクセスしてきているユーザエージェント のしるしの文字列です。典型的な例は、 `Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)`。たとえば、 get_browser() でこの値を使って ページの出力をそのブラウザにあわせたものにすることも できるでしょう。

'`HTTPS`'

  スクリプトが HTTPS プロトコルを通じて実行されている場合に 空でない値が設定されます。

  ISAPI を IIS で使用している場合は、HTTPS プロトコルを通さないでリクエストが行われたときの値は `off` となることに注意しましょう。

'`REMOTE_ADDR`'

  現在ページをみているユーザの IP アドレス。

'`REMOTE_HOST`'

  現在のページにアクセスしているホスト名。DNS の逆引き検索は ユーザの `REMOTE_ADDR` に基づいています。

  > 注意: Web サーバがこの値を生成できるように設定されている必要があります。 例えば Apache の場合 `HostnameLookups On` が `httpd.conf` に設定されていなければこの値は生成されません。 gethostbyaddr() もご覧ください。

'`REMOTE_PORT`'

  ユーザのマシンから Web サーバへの通信に使用されているポート番号

'`SCRIPT_FILENAME`'

  現在実行されているスクリプトの絶対パス

  > 注意: `file.php` あるいは `../file.php` のような相対パスを指定して CLI でスクリプトが実行されている場合、 `$_SERVER['SCRIPT_FILENAME']` には ユーザが指定した相対パスが含まれます。

'`SERVER_ADMIN`'

  Web サーバの設定ファイルの SERVER_ADMIN (Apache の場合)ディレクティブ にセットされている値。スクリプトがバーチャルホスト上で 実行されている場合、バーチャルホストに対して値が定義されます。

'`SERVER_PORT`'

  Web サーバの通信ポートとして使用されているポート番号。デフォルトでは '`80`' ですが、例えば SSL を使用している場合は セキュア HTTP ポートとして設定されている値に変わります。

'`SERVER_SIGNATURE`'

  サーバ上で生成されたページに追加される、 サーバのバージョン名とバーチャルホスト名の文字列。 Web サーバの設定で有効になっていることが必要です。

'`PATH_TRANSLATED`'

  バーチャルからリアルへのマッピングがなされた後の、 現在のスクリプトのファイルシステム上（ドキュメントルートではなく） でのパス。

  > 注意: PHP 4.3.2 以降、`PATH_TRANSLATED` は、 Apache 2 SAPI において暗黙のうちに設定されなく なりました。一方、Apache 1 では、この値が Apache により設定されない場合、 `SCRIPT_FILENAME` と同じ値に設定されます。 この変更は、`PATH_TRANSLATED` は `PATH_INFO` が定義されている場合のみ 存在するべきであるという CGI の規約を満たすために 行われました。

  > Apache 2 ユーザは、`PATH_INFO` を定義するために `httpd.conf` の中で `AcceptPathInfo = On` を使用することが可能です。

'`SCRIPT_NAME`'

  現在のスクリプトのパス。 スクリプト自身のページを指定するのに有用です。 __FILE__ 定数には、カレント(すなわち読み込まれた)ファイルのパスとファイル名が 含まれます。

'`REQUEST_URI`'

  ページにアクセスするために指定された URI。例えば、 '`/index.html`'

'`PHP_AUTH_DIGEST`'

  PHP を Apache のモジュールとして実行し、HTTP ダイジェスト認証を 行っている場合、クライアントから送られた 'Authorization' ヘッダの 内容が設定されます（適切な認証処理を行うために利用します）。

'`PHP_AUTH_USER`'

  PHP を Apache または IIS（PHP 5 での ISAPI）のモジュールとして 実行している場合に、HTTP 認証しているときにそのユーザ名がセットされます。

'`PHP_AUTH_PW`'

  PHP を Apache または IIS（PHP 5 での ISAPI）のモジュールとして 実行している場合に、HTTP 認証しているときにそのユーザの パスワードがセットされます。

'`AUTH_TYPE`'

  PHP を Apache のモジュールとして実行している場合に、 HTTP 認証しているときにその認証形式がセットされます。

## 環境変数: `$_ENV`

> 注意: 4.1.0 で導入されました。これ以前のバージョンの場合は、 `$HTTP_ENV_VARS` を使用してください。

これらの変数は PHP パーサが実行されている環境から PHP のグローバル名前空間に取り込まれます。 その多くは、PHP が実行されているシェルに由来するものであり、 システムが違えばシェルも違ってくるため、確定的なリストを 得ることは不可能です。定義されている環境変数のリストについては 使用しているシェルのドキュメントをご覧ください。

PHP がサーバモジュールとして実行されているか CGI プロセッサとして 実行されているかに関わらず、その他の環境変数は CGI 変数を含みます。

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 `$HTTP_ENV_VARS` を使うときそうするように、 この変数に関数やメソッドの中からアクセスする際に global $_ENV; のようにする必要はありません。

`$HTTP_ENV_VARS` は同じ情報を持っていますが、 これは自動グローバルではありません（`$HTTP_ENV_VARS` と `$_ENV` は違う変数であり、PHP はそれぞれ別に扱います）。

register_globals が オンにセットされている場合、これらの変数はグローバルスコープ で有効となります。例えば、`$_ENV` と `$HTTP_ENV_VARS` 配列は分けられます。 関連する情報として、 Using Register Globals というセキュリティの章をご覧ください。 個々のグローバルは自動グローバルではありません。

## HTTPクッキー: `$_COOKIE`

> 注意: 4.1.0 で導入されました。これ以前のバージョンの場合は、 `$HTTP_COOKIE_VARS` を使用してください。

カレントのスクリプトから渡された HTTP クッキーの情報が 格納された連想配列。

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 `$HTTP_COOKIE_VARS` を使うときにそうするように、 この変数に関数やメソッドの中からアクセスする際に global $_COOKIE; のようにする必要はありません。

`$HTTP_COOKIE_VARS` は同じ情報を持っていますが、 これは自動グローバルではありません （`$HTTP_COOKIE_VARS` と `$_COOKIE` は違う変数であり、PHP はそれぞれ別に扱います）。

register_globals が オンにセットされている場合、これらの変数はグローバルスコープで 有効となります。例えば、`$_COOKIE` と `$HTTP_COOKIE_VARS` 配列は分けられます。 関連する情報として、 Using Register Globals というセキュリティの章をご覧ください。 個々のグローバルは自動グローバルではありません。

## HTTP GET 変数: `$_GET`

> 注意: 4.1.0 で導入されました。これ以前のバージョンの場合は、 `$HTTP_GET_VARS` を使用してください。

カレントのスクリプトから HTTP GET を通して渡された情報が 格納された連想配列。自動的にどのスコープでもグローバルとなります。

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 `$HTTP_GET_VARS` を使うときにそうするように、 この変数に関数やメソッドの中からアクセスする際に global $_GET; のようにする必要はありません。

`$HTTP_GET_VARS` は同じ情報を持っていますが、 これは自動グローバルではありません （`HTTP_GET_VARS` と `$_GET` は違う変数であり、PHPはそれぞれ別に扱います）。

register_globals が オンにセットされている場合、これらの変数はグローバルスコープで 有効となります。例えば、`$_GET` と `$HTTP_GET_VARS` 配列は分けられます。 関連する情報として、 Using Register Globals というセキュリティの章をご覧ください。 個々のグローバルは自動グローバルではありません。

## HTTP POST 変数: `$_POST`

> 注意: 4.1.0 で導入されました。これ以前のバージョンの場合は、 `$HTTP_POST_VARS` を使用してください。

カレントのスクリプトから HTTP POST を通して渡された情報が 格納された連想配列。自動的にどのスコープでもグローバルとなる。

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 `$HTTP_POST_VARS` を使うときにそうするように、 この変数に関数やメソッドの中からアクセスする際に global $_POST; のようにする必要はありません。

`$HTTP_POST_VARS` は同じ情報を持っていますが、 これは自動グローバルではありません （`HTTP_POST_VARS` と `$_POST` は違う変数であり、PHPはそれぞれ別に扱います）。

register_globals が オンにセットされている場合、これらの変数はグローバルスコープで 有効となります。例えば、`$_POST` と `$HTTP_POST_VARS` 配列は分けられます。 関連する情報として、 Using Register Globals というセキュリティの章をご覧ください。 個々のグローバルは自動グローバルではありません。

## HTTP ファイルアップロード変数: `$_FILES`

> 注意: 4.1.0 で導入されました。これ以前のバージョンの場合は、 `$HTTP_POST_FILES` を使用してください。

カレントのスクリプトから HTTP POST メソッドを通してアップロードされた 情報が格納された連想配列。自動的にどのスコープでもグローバルとなります。

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 `$HTTP_POST_FILES` を使うときにそうするように、 この変数に関数やメソッドの中からアクセスする際に global $_FILES; のようにする必要はありません。

`$HTTP_POST_FILES` は同じ情報を持っていますが、 これは自動グローバルではありません (`$HTTP_POST_FILES` と `$_FILES` は異なる変数であり、PHP はこれらを異なる変数として扱うことに注意してください)。

register_globals が オンにセットされている場合、これらの変数はグローバルスコープで 有効となります。例えば、`$_FILES` と `$HTTP_POST_FILES` 配列は分けられます。 関連する情報として、 Using Register Globals というセキュリティの章をご覧ください。 個々のグローバルは自動グローバルではありません。

## リクエスト変数: `$_REQUEST`

> 注意: 4.1.0 で導入されました。以前のバージョンには、同等な配列はありません。

`$_GET`, `$_POST`, `$_COOKIE`, `$_FILES` の内容を格納した連想配列

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 この変数に関数やメソッドの中からアクセスする際に global $_FILES; のようにする必要はありません。

register_globals が オンにセットされている場合、これらの変数はグローバルスコープでn 有効となります。例えば、`$_REQUEST` 配列は分けられます。 関連する情報として、 Using Register Globals というセキュリティの章をご覧ください。 個々のグローバルは自動グローバルではありません。

## セッション変数: `$_SESSION`

> 注意: 4.1.0 で導入されました。これ以前のバージョンでは、 `$HTTP_SESSION_VARS` を使用してください。

現在のスクリプトで有効なセッション情報が格納された配列です。 使用法の詳細については セッション処理関数を ご覧ください。

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 `$HTTP_SESSION_VARS` を使うときにそうするように、 この変数に関数やメソッドの中からアクセスする際に global $_SESSION; のようにする必要はありません。

`$HTTP_SESSION_VARS` は同じ情報を格納していますが、 自動グローバルではありません (`$HTTP_SESSION_VARS` と `$_SESSION` は異なる変数であり、PHP はこれらを異なる変数として扱うことに注意してください)。

register_globals が オンにセットされている場合、これらの変数はグローバルスコープで 有効となります。例えば、`$_SESSION` と `$HTTP_SESSION_VARS` 配列は分けられます。 関連する情報として、 Using Register Globals というセキュリティの章をご覧ください。 個々のグローバルは自動グローバルではありません。

## グローバル変数: `$GLOBALS`

> 注意: `$GLOBALS` は、PHP 3.0.0 以降で利用可能です。

カレントのスクリプト上でグローバルスコープで定義されている全ての 変数を格納した連想配列。変数の名前は配列のキー。

これは'スーパーグローバル'又は自動グローバルな変数です。 つまり、スクリプトの全てのスコープで有効な変数であるということです。 この変数に関数やメソッドの中からアクセスする際に global $_GLOBALS; のようにする必要はありません。

## 直近のエラーメッセージ: `$php_errormsg`

`$php_errormsg` は、PHP によって発せられた 最後のエラーメッセージのテキストを格納する変数です。 エラーが発生したスコープ内、かつ track_errors 設定オプションが オン（デフォルトはオフ）にセットされている場合にのみ有効です。

前のページ | ホーム | 次のページ
予約語の一覧 | 上に戻る | 定義済のクラス