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.