(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)
$_SERVER — サーバー情報および実行時の環境情報
$_SERVER は、ヘッダ、パス、スクリプトの位置のような 情報を有する配列です。この配列のエントリは、Web サーバーにより 生成されます。全ての Web サーバーがこれら全てを提供する保証はありません。 サーバーは、これらのいくつかを省略したり、この一覧にない他のものを 定義する可能性があります。しかし、これらの変数のほとんどは、 » CGI/1.1 specification で定義されています。したがって、これらのほとんどは定義されていることを 期待することができます。
注意: PHP を コマンドライン から実行している場合、 これらの変数のほとんどは利用できないか、 なんの意味も持ちません。
以下に示された要素に加え、 PHP はリクエストヘッダから追加の要素を生成します。 それらの要素は HTTP_
で始まり、 その後にヘッダの名前が続き、 かつ大文字に変換され、ハイフンがアンダースコアになります。 たとえば、 Accept-Language
ヘッダは $_SERVER['HTTP_ACCEPT_LANGUAGE']
として利用可能です。
'CGI/1.1'
注意: Apache 2 では、
UseCanonicalName = On
とServerName
を設定する必要があります。 そうしなければ、この値はクライアントが提供するホスト名を指すようになってしまい、無意味です。 また、セキュリティ的な意味合いでこの値に頼ってはいけません。
'HTTP/1.0'
'GET'
, 'HEAD'
, 'POST'
, 'PUT'
など。 注意:
リクエストのメソッドが
HEAD
だった場合、 PHP スクリプトはヘッダを送信した後(言い換えれば、 出力バッファリングを行わずに全出力を処理した後)に終了します。
注意: Web サーバーがこの値を生成できるように設定されている必要があります。 例えば Apache の場合
HostnameLookups On
が httpd.conf に設定されていなければこの値は生成されません。 gethostbyaddr() もご覧ください。
現在実行されているスクリプトの絶対パス
注意:
file.php あるいは ../file.php のような相対パスを指定して CLI でスクリプトが実行されている場合、 $_SERVER['SCRIPT_FILENAME'] には ユーザーが指定した相対パスが含まれます。
'80'
ですが、例えば SSL を使用している場合は セキュア HTTP ポートとして設定されている値に変わります。 注意: Apache 2 では、
UseCanonicalName = On
だけでなくUseCanonicalPhysicalPort = On
も設定しないと物理ポート (実際のポート) を取得できません。設定しなければ、 この値は詐称できる状態になり、 物理ポートを返さなくなるかもしれません。 セキュリティに依存するコンテキストで、この値に頼るのは安全ではありません。
注意: Apache 2 ユーザーは、PATH_INFO を定義するために httpd.conf の中で
AcceptPathInfo = On
を使用することが可能です。
/index.html
' /some/stuff
となります。 例1 $_SERVER の例
<?php
echo $_SERVER['SERVER_NAME'];
?>
上の例の出力は、 たとえば以下のようになります。
www.example.com
注意:
これは 'スーパーグローバル' あるいは自動グローバル変数と呼ばれるものです。 スクリプト全体を通してすべてのスコープで使用することができます。 関数やメソッドの内部で使用する場合にも global $variable; とする必要はありません。