タイトル: スーパーグローバル変数
本稿は PHP のスーパーグローバル変数に関する記事です。スーパーグローバル変数とは、PHP があらかじめ定義しスクリプト実行時に自動で値を代入してくれる組み込み変数で、関数の中でも global 宣言なしで参照できるのが特徴です。
各変数の詳細は子ページを参照してください。
本ページの子ページ
- $_GET — URL のクエリパラメータ
- $_POST — POST されたフォームデータ
- $_SERVER — サーバ/実行環境情報
- $_SERVER — 補足ページ
- $_COOKIE — クライアントから送られた Cookie
- $_ENV — 環境変数
- $_FILES — アップロードされたファイル情報
スーパーグローバル変数の一覧
| 変数 | 内容 |
|---|---|
$GLOBALS | すべてのグローバル変数への参照 |
$_SERVER | サーバ情報、ヘッダ、パス、スクリプト位置 |
$_GET | URL のクエリパラメータ |
$_POST | POST 送信されたパラメータ |
$_FILES | アップロードファイルのメタ情報 |
$_COOKIE | HTTP Cookie |
$_SESSION | セッション変数 (session_start() 後に有効) |
$_REQUEST | $_GET、$_POST、$_COOKIE の統合 (推奨されない) |
$_ENV | 環境変数 |
基本的な使い方
|
<?php |
セキュリティ上の注意
- 外部入力は信用しない —
$_GET/$_POST/$_COOKIEはクライアントが自由に書き換えられる - 必ずバリデーション・サニタイズ: 表示時は
htmlspecialchars()、SQL はプレースホルダ $_REQUESTは出所が混ざるため使用を避ける (どこから来た値か追跡しにくい)- セッション ID は HTTPS + HttpOnly + SameSite で保護
$_SERVER['HTTP_*']系はクライアント送信の生ヘッダ。HOST やリファラ等は改ざん可能- アップロードファイルは
$_FILES[..]['tmp_name']経由で取得し、move_uploaded_file()で保存する
主要な $_SERVER の代表的キー
| キー | 用途 |
|---|---|
REQUEST_METHOD | HTTP メソッド (GET / POST / 等) |
REQUEST_URI | リクエストされた URI |
QUERY_STRING | クエリ文字列 |
HTTP_HOST | ホスト名 |
HTTP_USER_AGENT | UA |
HTTP_REFERER | 遷移元 (改ざん可能・スペル注意) |
REMOTE_ADDR | クライアント IP |
SERVER_NAME | サーバ名 |
HTTPS | HTTPS で接続されたか |
SCRIPT_NAME / SCRIPT_FILENAME | 実行中スクリプトのパス |
フレームワーク利用時の注意
- Laravel / Symfony 等のフレームワークでは、リクエストをRequest オブジェクト経由で扱うのが原則
- スーパーグローバル変数を直接触ると、ミドルウェアや CSRF 等の保護が外れる可能性がある
- テストの際にもフレームワークのテストヘルパでリクエストを差し替える方が安全