PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの定義済み変数(スーパーグローバル)徹底解説!$_SERVER・$_GET・$_POSTなどの使い方

はじめに

すべてのPHPスクリプトは、あらかじめシステム側で用意された多数の「定義済み変数(スーパーグローバル変数)」にアクセスできます。ただし、その多くはWebサーバーソフトウェアやPHPのバージョンなど、実行環境に依存する点に注意が必要です。また、一部の変数はコマンドラインモードで動作するスクリプトでは利用できません。

$GLOBALSには、グローバルスコープで利用可能なすべての定義済み変数への参照が格納されており、これらの変数の大半はphpinfo()の出力でも確認できます。本記事では、実務で特によく使われる定義済み変数について、具体例とともにわかりやすく解説します。

$_SERVER:サーバー情報と実行環境の取得

$_SERVERは、HTTPヘッダー、スクリプトのパス、サーバー環境に関する情報を格納する配列変数です。以下に、代表的な要素を紹介します。

PHP_SELF

現在実行中のスクリプトのファイル名を保持します。たとえば、ローカルサーバーのドキュメントルート直下にあるtestフォルダ内のスクリプトは、次のようなパスを返します。

<?php
echo $_SERVER['PHP_SELF'];
?>

https://localhost/test/testscript.php というURLでアクセスした場合の表示結果は次のとおりです。

/test/testscript.php

SERVER_ADDR

現在のスクリプトが実行されているサーバーのIPアドレスを返します。

SERVER_NAME

現在のスクリプトが実行されているサーバーホストの名前です。ローカル環境で実行している場合は「localhost」が返されます。

QUERY_STRING

クエリ文字列とは、「key=value」形式のペアを&記号で連結し、URLの?記号以降に付加した文字列のことです。たとえば、https://localhost/testscript?name=xyz&age=20 というURLの場合、末尾の「name=xyz&age=20」がクエリ文字列として返されます。

REQUEST_METHOD

ページへアクセスする際に使用されたHTTPリクエストメソッド(GET、POST、PUT、DELETEなど)です。前述の例のように、URLに?記号でクエリ文字列を付けてアクセスした場合は、GETメソッドによるリクエストとなります。

DOCUMENT_ROOT

サーバー上でドキュメントルートとして設定されているディレクトリ名を返します。XAMPPのApacheサーバーでは「htdocs」がドキュメントルートの名称として返されます。

C:/xampp/htdocs

HTTP_USER_AGENT

現在ページにアクセスしているユーザーエージェント(ブラウザ)を表す文字列です。訪問者のブラウザの種類やOSなどを判別する際に利用されます。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36

REMOTE_ADDR

現在のページを閲覧しているユーザーのマシンのIPアドレスです。

SERVER_PORT

Webサーバーがリクエストを待ち受けているポート番号です。デフォルトは80番です。

$_GET:URLパラメータの受け取り

デフォルトでは、クライアントのブラウザはHTTP GETメソッドを使ってサーバー上のURLへリクエストを送信します。URLに付加されたクエリ文字列には、&記号で連結されたkey=valueペアが含まれることがあり、$_GET連想配列はこれらのキーと値のペアを保持します。

ここで、ブラウザのURLがhttps://localhost/testscript?name=xyz&age=20であると仮定します。

<?php
echo "Name : " . $_GET["name"] . "<br>";
echo "Age : " . $_GET["age"];
?>

実行結果:

Name : xyz
Age : 20

$_POST:フォームデータの受け取り

$_POSTは、HTTP POSTメソッドで送信されたkey=valueペアからなる連想配列です。リクエストのContent-TypeはURLEncodedまたはmultipart/form-dataである必要があります。

POSTメソッドでPHPスクリプトへデータを送るには、HTMLフォームでmethod属性に「POST」を指定します。以下はtest.htmlの記述例です。

<form action="testscript.php" method="POST">
<input type="text" name="name">
<input type="text" name="age">
<input type="submit" value="submit">
</form>

データを受け取る側のPHPスクリプトは次のとおりです。

<?php
echo "Name : " . $_POST["name"] . "<br>";
echo "Age : " . $_POST["age"];
?>

実行結果:

Name : xyz
Age : 20

$_FILES:アップロードファイルの処理

$_FILESは、HTTP POSTメソッド経由でアップロードされたファイルの情報を格納する連想配列です。ファイルをアップロードするには、enctype属性を「multipart/form-data」に設定したPOSTフォームが必要です。

<form action="testscript.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="submit">
</form>

PHPスクリプト内では、$_FILES変数を次のように参照できます。

<?php
print_r($_FILES);
?>

実行結果:

Array ( [file] => Array ( [name] => hello.html [type] => text/html [tmp_name] => C:\xampp\tmp\php9647.tmp [error] => 0 [size] => 56 ) )

各キーの意味は次のとおりです。
name:元のファイル名
type:ファイルのMIMEタイプ
tmp_name:サーバー上一時保存先のパス
error:アップロード時のエラーコード(0は成功)
size:ファイルサイズ(バイト単位)

その他の主な定義済み変数

$_REQUEST

$_GET、$_POST、$_COOKIEの内容をまとめて提供する連想配列です。送信方法を意識せずに値を受け取れる反面、データの出所が曖昧になるため、用途に応じて$_GETや$_POSTを直接使うことが推奨されます。

$_SESSION

HTTPセッションを表す変数群を格納する連想配列です。ログイン状態の管理などに活用されます。利用する際は、スクリプトの先頭でsession_start()を呼び出す必要があります。

$_ENV

環境変数を格納する配列です。これらの変数はPHPのグローバル名前空間にインポートされます。

$_COOKIE

サーバーはCookieという仕組みを使って、クライアントのコンピュータに一定のデータを保存できます。Cookieはリクエストのたびに自動的に送信されます。$_COOKIEは、Cookie変数とその値からなる連想配列です。

まとめ

PHPの定義済み変数は、サーバー情報の取得、フォームデータやファイルの受信、セッションやCookieの管理など、Webアプリケーション開発に不可欠な機能を提供します。それぞれの変数の特性を正しく理解し、適切に使い分けることで、安全で効率的なスクリプトを作成できるようになります。

  1. PHPのextract()関数とは?使い方とパラメータを徹底解説

    extract()関数とはPHPのextract()関数は、配列のキーと値を現在のシンボルテーブルに変数としてインポートする関数です。連想配列の各要素が「キー名=変数名、値=変数の値」として展開され、戻り値としては正常に抽出された変数の個数が返されます。構文extract(arr, rules, prefix)パラメータarr − 変数として展開したい対象の配列を指定します。rules − 無効な変数名や既存変数との衝突(コンフリクト)が発生した場合の扱い方を指定します。指定できる値は以下の通りです。EXTR_OVERWRITE − デフォルト値。同名の変数が既に存在する場合、既存の変数を上書

  2. JavaScript変数の値をPHPに渡して取得する方法をわかりやすく解説

    JavaScript変数をPHPで扱う基本の考え方JavaScriptとPHPは実行されるタイミングが異なります。PHPはサーバーサイドで先に処理され、JavaScriptはその結果を受け取ったブラウザ(クライアントサイド)で後から動作します。そのため、JavaScriptの変数をPHPへ「直接」渡すことはできず、何らかの方法でサーバーへ値を送信する必要があります。ただし、同じページ内でJavaScriptの変数の値を出力・表示するだけであれば、以下のように簡単に実現できます。同じページ内でJavaScript変数の値を表示するサンプルコード<script> var res