PHP - 定義済みの変数

定義済みの変数

PHP には定義済みの定数が多く用意されており、すべてのスクリプトで使用することができます。外部変数や、環境変数、エラーメッセージ、最後に取得したヘッダなどのあらゆる内容が取得できます。

スーパーグローバル

PHP の定義済み変数の中にはスーパーグローバルがあります。これは、スクリプト全体を通してすべてのスコープで使用可能な変数のことです。関数やメソッドの内部からアクセスする際にも global $variable; とする必要はありません。スーパーグローバルには次のようなものがあります。

  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_REQUEST
  • $_ENV

$GLOBALS

スクリプトのグローバルスコープに現在定義されているすべての変数への参照を含む連想配列です。変数名が配列のキーとなります。

<?php
  function test() {
    $foo = "local variable";

    echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
    // $foo in global scope: Example content
    
    echo '$foo in current scope: ' . $foo . "\n";
    // $foo in current scope: local variable
  }

  $foo = "Example content";
  test();
?>
$GLOBALS の例

$_SERVER

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

PHP_SELF
現在実行しているスクリプトのファイル名です。ドキュメントルートから取得されます。例えば、http://example.com/foo/bar.php にあるスクリプトでは $_SERVER['PHP_SELF']/foo/bar.php となります。__FILE__ 定数には、カレントファイルのパスとファイル名が含まれます。PHP がコマンドラインから実行される場合、この変数にはスクリプト名が含まれます。
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' など。
REQUEST_TIME
リクエストの開始時のタイムスタンプです。
REQUEST_TIME_FLOAT
リクエストの開始時のタイムスタンプです (マイクロ秒までの精度)。
QUERY_STRING
ページがアクセスされた際に、もし検索引数があればそれが格納されます。
DOCUMENT_ROOT
現在実行されているスクリプトが存在するドキュメントルートディレクトリです。サーバの config ファイルで定義されています。
HTTP_ACCEPT
現在のリクエストの Accept: ヘッダがもしあればその内容が格納されます。
HTTP_ACCEPT_CHARSET
現在のリクエストの Accept-Charset: ヘッダがもしあればその内容が格納されます。
HTTP_ACCEPT_ENCODING
現在のリクエストに Accept-Encoding: ヘッダがもしあればその内容が格納されます。
HTTP_ACCEPT_LANGUAGE
現在のリクエストに Accept-Language: ヘッダがもしあればその内容が格納されます。
HTTP_CONNECTION
現在のリクエストに Connection: ヘッダがもしあればその内容が格納されます。
HTTP_HOST
現在のリクエストに Host: ヘッダがもしあればその内容が格納されます。
HTTP_REFERER
現在のページに遷移する前にユーザエージェントが参照していたページのアドレスがもしあればその内容が格納されます。これはユーザエージェントによってセットされます。すべてのユーザエージェントがこれをセットしているわけではなく、HTTP_REFERER を変更する機能を持つものもあります。
HTTP_USER_AGENT
現在のリクエストに User-Agent: ヘッダがもしあればその内容が格納されます。
HTTPS
スクリプトが HTTPS プロトコルを通じて実行されている場合に空でない値が設定されます。
REMOTE_ADDR
現在ページを見ているユーザの IP アドレス。
REMOTE_HOST
現在のページにアクセスしているホスト名。DNS の逆引き検索は ユーザの REMOTE_ADDR に基づいています。ただし、Web サーバがこの値を生成できるように設定されている必要があります。例えば Apache の場合 HostnameLookups On が httpd.conf に設定されていなければこの値は生成されません。
REMOTE_PORT
ユーザのマシンから Web サーバへの通信に使用されているポート番号が設定されます。
REMOTE_USER
認証されたユーザ情報が設定されます。
REDIRECT_REMOTE_USER
リクエストが内部でリダイレクトされた場合の認証されたユーザ情報が設定されます。
SCRIPT_FILENAME
現在実行されているスクリプトの絶対パスが設定されます。相対パスを指定している場合、$_SERVER['SCRIPT_FILENAME'] には ユーザが指定した相対パスが含まれます。
SERVER_ADMIN
Web サーバーの設定ファイルの SERVER_ADMIN (Apache の場合) ディレクティブ にセットされている値が設定されます。スクリプトがバーチャルホスト上で実行されている場合、バーチャルホストに対して値が定義されます。
SERVER_PORT
Web サーバの通信ポートとして使用されているポート番号が設定されます。デフォルトは 80 ですが、SSL を使用している場合はセキュア HTTP ポートとして設定されている値に変わります。
SERVER_SIGNATURE
サーバ上で生成されたページに追加される、サーバのバージョン名とバーチャルホスト名の文字列が設定されます。Web サーバの設定で有効になっていることが必要です。
PATH_TRANSLATED
バーチャルからリアルへのマッピングがなされた後の、現在のスクリプトのファイルシステム上でのパスが設定されます。
SCRIPT_NAME
現在のスクリプトのパスが設定されます。__FILE__ 定数には、カレントファイルのパスとファイル名が含まれます。
REQUEST_URI
ページにアクセスするために指定された URI が設定されます。
PHP_AUTH_DIGEST
HTTP ダイジェスト認証を行っている場合、クライアントから送られた Authorization ヘッダの内容が設定されます。
PHP_AUTH_USER
HTTP 認証しているときにそのユーザ名が設定されます。
PHP_AUTH_PW
HTTP 認証しているときにそのユーザのパスワードが設定されます。
AUTH_TYPE
HTTP 認証しているときにその認証形式が設定されます。
PATH_INFO
スクリプトファイル名とクエリ文字列の間にある、クライアントが提供するパス名情報が設定されます。
ORIG_PATH_INFO
PHP で処理される前の PATH_INFO の情報が設定されます。
<?php
  echo $_SERVER['SERVER_NAME']; // www.example.com
?>
$_SERVER の例

$_GET

URL パラメータで現在のスクリプトに渡された変数の連想配列です。この配列の値は GET リクエストだけでなく、クエリストリングが含まれた全てのリクエストで収集されることに注意して下さい。

<?php
  // http://example.com/?name=Hannes の場合
  echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!'; // Hello Hannes!
?>
$_GET の例

$_POST

Content-Type に application/x-www-form-urlencoded あるいは multipart/form-data を用いた HTTP リクエストで、HTTP POST メソッドから現在のスクリプトに渡された変数の連想配列です。

<?php
  // name=Hannes を POST した場合
  echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!'; // Hello Hannes!
?>
$_POST の例

$_FILES

HTTP POST メソッドで現在のスクリプトにアップロードされた項目の連想配列です。。

$_COOKIE

現在のスクリプトに HTTP クッキーから渡された変数の連想配列です。

<?php
  // "name" というクッキーに "Hannes" が設定されている場合
  echo 'Hello ' . htmlspecialchars($_COOKIE["name"]) . '!'; // Hello Hannes!
?>
$_COOKIE の例

$_SESSION

現在のスクリプトで使用できるセッション変数を含む連想配列です。

$_REQUEST

$_GET, $_POST, $_COOKIE の内容をまとめた連想配列です。

$_ENV

環境変数として現在のスクリプトに渡された変数の連想配列です。

<?php
  // ユーザ "bjori" がスクリプトを実行した場合
  echo 'My username is ' .$_ENV["USER"] . '!'; // My username is bjori!
?>
$_ENV の例

関連記事