PHP 全局変数 - スーパーグローバル変数

スーパーグローバル変数はPHP 4.1.0で導入され、全てのスコープで常に利用可能なビルトイン変数です。

PHP 全局変数 - スーパーグローバル変数

PHPでは、多くのプレデファインド変数が「スーパーグローバル」であり、これはスクリプトの全てのスコープで利用可能であることを意味します。関数やメソッドの中でglobal $variable;を実行することなくアクセスできます。

これらのスーパーグローバル変数は:

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

このセクションでは、いくつかのスーパーグローバル変数を紹介し、後の章で他のスーパーグローバル変数について説明します。

$GLOBALS — 全てのグローバルスコープで利用可能な全ての変数を参照

$GLOBALSというグローバル変数は、PHPスクリプトのどこからでも(関数やメソッドからも)グローバル変数にアクセスするために使用されます。

PHPは、$GLOBALS[index]という名前の配列にすべてのグローバル変数を保存しています。変数の名前は配列のキーです。

以下の例では、スーパーグローバル変数 $GLOBALSの使用方法を示します:

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

実行例

上記の例では、zが$GLOBALS配列の変数であるため、関数の外でもアクセスできます。

PHP $_SERVER

$_SERVERという超グローバル変数は、ヘッダ、パス、スクリプトの位置に関する情報を保存しています。

以下の例では、$_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'] サーバーが使用するCGI規格のバージョンを返します。
$_SERVER['SERVER_ADDR'] 現在のスクリプトが実行されているサーバーのIPアドレスを返します。
$_SERVER['SERVER_NAME'] 現在のスクリプトが実行されているサーバーのホスト名を返します(例:www.codew3c.com)。
$_SERVER['SERVER_SOFTWARE'] サーバー識別文字列を返します(例:Apache/2.2.24)。
$_SERVER['SERVER_PROTOCOL'] ページにアクセスした際の通信プロトコルの名前とバージョンを返します(例:「HTTP/1.0」)。
$_SERVER['REQUEST_METHOD'] ページにアクセスした際に使用したリクエストメソッドを返します(例えばPOST)。
$_SERVER['REQUEST_TIME'] リクエストの開始時のタイムスタンプを返します(例えば1577687494)。
$_SERVER['QUERY_STRING'] クエリストリングを返します(クエリストリングでこのページにアクセスしている場合)。
$_SERVER['HTTP_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'] この値は Apache サーバー設定ファイルの SERVER_ADMIN パラメータを指明しています。
$_SERVER['SERVER_PORT'] Web サーバーが使用するポート。デフォルト値は「80」です。
$_SERVER['SERVER_SIGNATURE'] サーバーのバージョンと仮想ホスト名を返します。
$_SERVER['PATH_TRANSLATED'] 現在のスクリプトが存在するファイルシステム(ドキュメントルートディレクトリ以外)の基本パスです。
$_SERVER['SCRIPT_NAME'] 現在のスクリプトのパスを返します。
$_SERVER['SCRIPT_URI'] 現在のページの URI を返します。

PHP $_REQUEST

PHP $_REQUEST は、HTML フォームの送信データを収集するために使用されます。

以下の例では、入力フィールドと送信ボタンを含むフォームを示しています。ユーザーが送信ボタンをクリックしてフォームデータを送信すると、フォームデータは <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 は、method="post" の HTML フォームの送信後にフォームデータを収集するために広く使用されています。$_POST は、変数の送信にもよく使用されます。

以下の例では、入力フィールドと送信ボタンを含むフォームを示しています。ユーザーが送信ボタンをクリックしてデータを送信すると、フォームデータが <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 
$name = $_POST['fname'];
echo $name; 
?>
</body>
</html>

実行例

PHP $_GET

PHP $_GET は、HTML フォーム (method="get") が提出された後のフォームデータを収集するためにも使用できます。

$_GET はまた、URL 内に送信されたデータを収集することもできます。

パラメータを持つリンクを持つページがあると仮定します:

<html>
<body>
<a href="test_get.php?subject=PHP&web=codew3c.com">テスト $GET</a>
</body>
</html>

ユーザーが "テスト $GET" リンクをクリックすると、パラメータ "subject" と "web" が "test_get.php" に送信され、それらの値を "test_get.php" 内で $_GET を通じてアクセスすることができます。

以下の例は "test_get.php" 内のコードです:

<html>
<body>
<?php 
echo "在 " . $_GET['web'] . " 学习 " . $_GET['subject'];
?>
</body>
</html>

実行例

ヒント:あなたは PHP フォーム このセクションでは、$_POST と $_GET に関する知識をさらに学びます。