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 の最初の情報は同じですが、
スーパーグローバルではありません (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
というセキュリティの章をご覧ください。
個々のグローバルはスーパーグローバルではありません。
$_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
というセキュリティの章をご覧ください。
個々のグローバルはスーパーグローバルではありません。
$_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
というセキュリティの章をご覧ください。
個々のグローバルはスーパーグローバルではありません。
$_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
というセキュリティの章をご覧ください。
個々のグローバルはスーパーグローバルではありません。
$_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 設定オプションが
オン(デフォルトはオフ)にセットされている場合にのみ有効です。
$HTTP_RAW_POST_DATA
$HTTP_RAW_POST_DATA には生の POST データが格納されます。
always_populate_raw_post_data
を参照ください。
$http_response_header
配列 $http_response_header は
get_headers() 関数の結果と同等です。
HTTP ラッパー を使用する時には、
$http_response_header に HTTP レスポンスヘッダが格納されます。
response headers.