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 の使い方を紹介します。

例

<?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?>

例を実行 »

上記の例では、z は $GLOBALS 配列内のスーパーグローバル変数であり、この変数は関数の外でもアクセスできます。


PHP $_SERVER

$_SERVER は、ヘッダー情報 (header)、パス (path)、スクリプトの場所 (script locations) などの情報を含む配列です。この配列の項目は Web サーバーによって作成されます。すべてのサーバーが全項目を提供するとは限りません。サーバーによっては一部を無視したり、ここに挙げられていない項目を提供する場合もあります。

以下の例では、$_SERVER の要素の使い方を示しています。

例

<?php echo $_SERVER['PHP_SELF']; echo "<br>"; echo $_SERVER['SERVER_NAME']; echo "<br>"; echo $_SERVER['HTTP_HOST']; echo "<br>"; echo $_SERVER['HTTP_REFERER']; echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<br>"; echo $_SERVER['SCRIPT_NAME']; ?>

例を実行 »

以下の表は、$_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 フィールドデータを収集できます。

例

<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body> </html>

例を実行 »


PHP $_POST

PHP $_POST はフォームデータの収集に広く使用されています。HTML の form タグでこの属性を指定します:"method="post"。

以下の例は、入力フィールド(input)と送信ボタン(submit)を持つフォーム(form)を示しています。 ユーザーが「Submit」ボタンをクリックしてフォームデータを送信すると、フォームデータは <form> タグの action 属性で指定されたスクリプトファイルに送信されます。 この例では、フォームデータを処理するファイルを指定しています。他の PHP ファイルに処理させたい場合は、指定したスクリプトファイル名を変更できます。 そして、スーパーグローバル変数 $_POST を使用して、フォーム内の input フィールドデータを収集できます。

例

<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html>

例を実行 »


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" ファイルのコードを示しています。

例

<html> <body> <?php echo "Study " . $_GET['subject'] . " @ " . $_GET['web']; ?> </body> </html>

例を実行 »

ヒント:$_POST と $_GET についてもっと学びたい場合は、当サイトのPHP フォームの章をご覧ください。

その他の拡張