スーパーグローバルは、PHP 4.1.0で導入された、常にすべてのスコープで使用できる 組み込み変数です。
PHP の定義済み変数の中には "スーパーグローバル" というものがあります。 これは、スコープに関係なく常にアクセス可能であり、何か特別な手続きをせずに関数やクラス、ファイルからアクセスすることができます。
PHPのスーパーグローバル変数は次の通りです:
この章では、一部のスーパーグローバルについてのみ説明し、残りは後の章で説明します。
$GLOBALS は、PHPのスーパーグローバル変数で、PHPスクリプト内のどこからでも(関数やメソッド内からでも) グローバルに変数へアクセスするために使用します。
PHPは、すべてのグローバル変数をd $GLOBALS[index] という配列に格納します。 index には、変数名が使われます。
次の例は、スーパーグローバル変数$GLOBALSを使用する方法を示しています:
<?php
$x = 75;
$y = 25;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
例の実行 »
上の例は、z は$GLOBALS配列内に存在する変数であるため、関数の外部からもアクセスできます!
$_SERVER は、ヘッダ、パス、およびスクリプトの場所に関する情報を保持するPHPのスーパーグローバル変数です。
下の例は、$_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'] | 現在実行中のスクリプトのファイル名を返します |
$_SERVER['GATEWAY_INTERFACE'] | サーバが使用しているCommon Gateway Interface(CGI)のバージョンを返します |
$_SERVER['SERVER_ADDR'] | ホストサーバーのIPアドレスを返します |
$_SERVER['SERVER_NAME'] | ホストサーバの名前(www.w3schools.comなど)を返します |
$_SERVER['SERVER_SOFTWARE'] | サーバの識別文字列(Apache/2.2.24など)を返します |
$_SERVER['SERVER_PROTOCOL'] | 情報プロトコルの名前とリビジョン(HTTP/1.1など)を返します |
$_SERVER['REQUEST_METHOD'] | ページへのアクセスに使われたリクエストメソッド(POSTなど)を返します |
$_SERVER['REQUEST_TIME'] | リクエストの開始のタイムスタンプ(1377687496など)を返します |
$_SERVER['QUERY_STRING'] | クエリ文字列を使用してページにアクセスされた場合は、そのクエリ文字列を返します |
$_SERVER['HTTP_ACCEPT'] | 現在のリクエストからAcceptヘッダを返します |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 現在のリクエストからAccept_Charsetヘッダ(utf-8、ISO-8859-1など)を返します |
$_SERVER['HTTP_HOST'] | 現在のリクエストからHostヘッダを返します |
$_SERVER['HTTP_REFERER'] | 現在のページの完全なURLを返します(すべてのユーザ・エージェントがサポートしていないため信頼はできません) |
$_SERVER['HTTPS'] | スクリプトはセキュアなHTTPプロトコルによって照会されますか |
$_SERVER['REMOTE_ADDR'] | ユーザが現在見ているページの IP アドレスを返します |
$_SERVER['REMOTE_HOST'] | ユーザが現在見ているページのホスト名を返します |
$_SERVER['REMOTE_PORT'] | Webサーバと通信するためにユーザのマシンで使っているポートを返します |
$_SERVER['SCRIPT_FILENAME'] | 現在実行中のスクリプトの絶対パス名を返します |
$_SERVER['SERVER_ADMIN'] | Webサーバ構成ファイルのSERVER_ADMINディレクティブに与えられた値を返します (スクリプトが仮想ホストで実行されている場合は、その仮想ホストに定義された値になります)(someone@w3schools.comなど) |
$_SERVER['SERVER_PORT'] | Webサーバが通信に使用しているサーバマシンのポートを返します(80など) |
$_SERVER['SERVER_SIGNATURE'] | サーバで生成されたページに追加されるサーバのバージョンと仮想ホスト名を返します |
$_SERVER['PATH_TRANSLATED'] | 現在のスクリプトのファイルシステムベースのパスを返します |
$_SERVER['SCRIPT_NAME'] | 現在のスクリプトのパスを返します |
$_SERVER['SCRIPT_URI'] | 現在のページのURIを返します |
PHP $_REQUEST は、HTMLフォームで送信されたデータの受取りに使います。
次の例は、入力フィールドと送信ボタン付きのフォームを示しています。 ユーザが、「送信」をクリックしてデータを送信すると、フォームデータは <form> タグのaction属性で指定されたファイルに送信されます。 この例では、フォームデータの処理に、このファイル自身を指定しています。フォームデータの処理に別のPHPファイルを使用したい場合は、 そのファイル名に置き換えてください。 その後、入力フィールドの値を受取るためにスーパーグローバル変数 $_REQUEST を使用することができます:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// collect value of input field
$name = $_REQUEST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo $name;
}
}
?>
</body>
</html>
例の実行 »
PHP $_POST は、method="post"でHTMLフォームで送信されたフォームデータの受取りに広く使われています。
次の例は、入力フィールドと送信ボタン付きのフォームを示しています。 ユーザが、「送信」をクリックしてデータを送信すると、フォームデータは <form> タグのaction属性で指定されたファイルに送信されます。 この例では、フォームデータの処理に、このファイル自身を指定しています。フォームデータの処理に別のPHPファイルを使用したい場合は、 そのファイル名に置き換えてください。 その後、入力フィールドの値を収受取るためにスーパーグローバル変数 $_POST を使用することができます:
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// collect value of input field
$name = $_POST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo $name;
}
}
?>
</body>
</html>
例の実行 »
PHP $_GET は、method="get"でHTMLフォームで送信されたフォームデータの受取りに使用することができます。
$_GET は、送信されたURL内のデータを受取ることもできます。
パラメータ付きのハイパーリンクを持つHTMLページがあったとします:
<html>
<body>
<a href="test_get.php?subject=PHP&web=W3schools.com">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'] . " at " . $_GET['web'];
?>
</body>
</html>
例の実行 »
チップ: PHPフォームの章で$$_POSTと$_GETの詳細を学習します。