PHP スーパーグローバル変数
スーパーグローバル変数は PHP 4.1.0 以降で有効になり、PHP システムに組み込まれた変数であり、1つのスクリプトのすべてのスコープで使用できます。
PHP スーパーグローバル変数
PHP にはいくつかのスーパーグローバル変数(superglobals)が定義済みであり、これはそれらが1つのスクリプトのすべてのスコープで使用できることを意味します。特別に宣言しなくても、関数やクラス内で使用できます。
PHP スーパーグローバル変数のリスト:
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
この章では、よく使用されるいくつかのスーパーグローバル変数を説明します。残りの変数については、以降の章で紹介します。
PHP $GLOBALS
$GLOBALS は PHP のスーパーグローバル変数グループであり、1つの PHP スクリプトのすべてのスコープからアクセスできます。
$GLOBALS は、すべての変数を含むグローバル連想配列です。変数名が配列のキーになります。
以下の例では、スーパーグローバル変数 $GLOBALS の使い方を紹介します。
例
例を実行 »
上記の例では、z は $GLOBALS 配列内のスーパーグローバル変数であり、この変数は関数の外でもアクセスできます。
PHP $_SERVER
$_SERVER は、ヘッダー情報 (header)、パス (path)、スクリプトの場所 (script locations) などの情報を含む配列です。この配列の項目は Web サーバーによって作成されます。すべてのサーバーが全項目を提供するとは限りません。サーバーによっては一部を無視したり、ここに挙げられていない項目を提供する場合もあります。
以下の例では、$_SERVER の要素の使い方を示しています。
例
例を実行 »
以下の表は、$_SERVER 変数の中の重要な要素を示しています。
| 要素/コード | 説明 |
|---|---|
| $_SERVER['PHP_SELF'] | 現在実行中のスクリプトのファイル名で、ドキュメントルート (document root) に関連します。例えば、アドレス http://example.com/test.php/foo.bar のスクリプトで $_SERVER['PHP_SELF'] を使用すると、/test.php/foo.bar が得られます。__FILE__ 定数は現在の(例えばインクルードされた)ファイルの完全なパスとファイル名を含みます。PHP 4.3.0 以降では、PHP がコマンドラインモードで実行されている場合、この変数にはスクリプト名が含まれます。それ以前のバージョンではこの変数は利用できません。 |
| $_SERVER['GATEWAY_INTERFACE'] | サーバーが使用する CGI 仕様のバージョン。例:"CGI/1.1"。 |
| $_SERVER['SERVER_ADDR'] | 現在実行中のスクリプトがあるサーバーの IP アドレス。 |
| $_SERVER['SERVER_NAME'] | 現在実行中のスクリプトがあるサーバーのホスト名。スクリプトが仮想ホスト上で実行されている場合、その名前は仮想ホストで設定された値によって決まります。(例:www.example.com) |
| $_SERVER['SERVER_SOFTWARE'] | サーバー識別文字列で、リクエストに応答するときのヘッダー情報で提供されます。(例:Apache/2.2.24) |
| $_SERVER['SERVER_PROTOCOL'] | ページをリクエストするときに使用される通信プロトコルの名前とバージョン。例:"HTTP/1.0"。 |
| $_SERVER['REQUEST_METHOD'] | ページへのアクセスに使用されるリクエストメソッド。例:"GET"、"HEAD"、"POST"、"PUT"。 |
| $_SERVER['REQUEST_TIME'] | リクエスト開始時のタイムスタンプ。PHP 5.1.0 から利用可能です。(例:1377687496) |
| $_SERVER['QUERY_STRING'] | クエリ文字列(query string)。もしあれば、これを通じてページにアクセスします。 |
| $_SERVER['HTTP_ACCEPT'] | 現在のリクエストヘッダー内の Accept: 項目の内容(存在する場合)。 |
| $_SERVER['HTTP_ACCEPT_CHARSET'] | 現在のリクエストヘッダー内の Accept-Charset: 項目の内容(存在する場合)。例:"iso-8859-1,*,utf-8"。 |
| $_SERVER['HTTP_HOST'] | 現在のリクエストヘッダー内の Host: 項目の内容(存在する場合)。 |
| $_SERVER['HTTP_REFERER'] | ユーザーエージェントを現在のページに導いた前のページのアドレス(存在する場合)。ユーザーエージェントの設定によって決まります。すべてのユーザーエージェントがこの項目を設定するわけではなく、HTTP_REFERER を変更できるものもあります。要するに、この値は信頼できません。) |
| $_SERVER['HTTPS'] | スクリプトが HTTPS プロトコルを介してアクセスされた場合、空でない値に設定されます。 |
| $_SERVER['REMOTE_ADDR'] | 現在のページを閲覧しているユーザーの IP アドレス。 |
| $_SERVER['REMOTE_HOST'] | 現在のページを閲覧しているユーザーのホスト名。DNS 逆引きはユーザーの REMOTE_ADDR に依存しません。 |
| $_SERVER['REMOTE_PORT'] | ユーザーのマシンが Web サーバーへの接続に使用しているポート番号。 |
| $_SERVER['SCRIPT_FILENAME'] | 現在実行中のスクリプトの絶対パス。 |
| $_SERVER['SERVER_ADMIN'] | この値は、Apache サーバーの設定ファイル内の SERVER_ADMIN パラメータを示します。スクリプトが仮想ホスト上で実行されている場合、その値はその仮想ホストの値です。(例:[email protected]) |
| $_SERVER['SERVER_PORT'] | Web サーバーが使用するポート。デフォルト値は "80" です。SSL セキュア接続を使用している場合、この値はユーザーが設定した HTTP ポートになります。 |
| $_SERVER['SERVER_SIGNATURE'] | サーバーのバージョンと仮想ホスト名を含む文字列。 |
| $_SERVER['PATH_TRANSLATED'] | 現在のスクリプトが存在するファイルシステム(ドキュメントルートではない)の基本パス。これはサーバーが仮想パスから実パスへのマッピングを行った後の結果です。 |
| $_SERVER['SCRIPT_NAME'] | 現在のスクリプトのパスを含みます。これはページが自分自身を指す必要がある場合に非常に便利です。__FILE__ 定数は現在のスクリプト(例えばインクルードされたファイル)の完全なパスとファイル名を含みます。 |
| $_SERVER['SCRIPT_URI'] | URI はアクセスするページを指定するために使われます。例:"/index.html"。 |
PHP $_REQUEST
PHP $_REQUEST は HTML フォームから送信されたデータを収集するために使用されます。
以下の例は、入力フィールド(input)と送信ボタン(submit)を持つフォーム(form)を示しています。 ユーザーが「Submit」ボタンをクリックしてフォームデータを送信すると、フォームデータは <form> タグの action 属性で指定されたスクリプトファイルに送信されます。 この例では、フォームデータを処理するファイルを指定しています。他の PHP ファイルに処理させたい場合は、指定したスクリプトファイル名を変更できます。 そして、スーパーグローバル変数 $_REQUEST を使用して、フォーム内の input フィールドデータを収集できます。
例
例を実行 »
PHP $_POST
PHP $_POST はフォームデータの収集に広く使用されています。HTML の form タグでこの属性を指定します:"method="post"。
以下の例は、入力フィールド(input)と送信ボタン(submit)を持つフォーム(form)を示しています。 ユーザーが「Submit」ボタンをクリックしてフォームデータを送信すると、フォームデータは <form> タグの action 属性で指定されたスクリプトファイルに送信されます。 この例では、フォームデータを処理するファイルを指定しています。他の PHP ファイルに処理させたい場合は、指定したスクリプトファイル名を変更できます。 そして、スーパーグローバル変数 $_POST を使用して、フォーム内の input フィールドデータを収集できます。
例
例を実行 »
PHP $_GET
PHP $_GET もフォームデータの収集に広く使用されています。HTML の form タグでこの属性を指定します:"method="get"。
$_GET は URL 経由で送信されたデータも収集できます。
パラメータを含むハイパーリンクを持つ HTML ページがあると仮定します:
<html> <body> <a href="test_get.php.html">Test $GET</a> </body> </html>
ユーザーがリンク「Test $GET」をクリックすると、パラメータ "subject" と "web" が "test_get.php" に送信されます。"test_get.php" ファイル内で $_GET 変数を使ってこれらのデータを取得できます。
以下の例は、"test_get.php" ファイルのコードを示しています。
例
例を実行 »
ヒント:$_POST と $_GET についてもっと学びたい場合は、当サイトのPHP フォームの章をご覧ください。
その他の拡張