17.

スーパーグローバル変数

編集

本稿は PHP のスーパーグローバル変数に関する記事です。スーパーグローバル変数とは、PHP があらかじめ定義しスクリプト実行時に自動で値を代入してくれる組み込み変数で、関数の中でも global 宣言なしで参照できるのが特徴です。

各変数の詳細は子ページを参照してください。

本ページの子ページ

  • $_GET — URL のクエリパラメータ
  • $_POST — POST されたフォームデータ
  • $_SERVER — サーバ/実行環境情報
  • $_SERVER — 補足ページ
  • $_COOKIE — クライアントから送られた Cookie
  • $_ENV — 環境変数
  • $_FILES — アップロードされたファイル情報

スーパーグローバル変数の一覧

変数内容
$GLOBALSすべてのグローバル変数への参照
$_SERVERサーバ情報、ヘッダ、パス、スクリプト位置
$_GETURL のクエリパラメータ
$_POSTPOST 送信されたパラメータ
$_FILESアップロードファイルのメタ情報
$_COOKIEHTTP Cookie
$_SESSIONセッション変数 (session_start() 後に有効)
$_REQUEST$_GET$_POST$_COOKIE の統合 (推奨されない)
$_ENV環境変数

基本的な使い方

<?php
// GET / POST
$keyword = $_GET['q'] ?? '';
$name    = $_POST['name'] ?? '';

// サーバ情報
$uri = $_SERVER['REQUEST_URI'] ?? '/';
$ip  = $_SERVER['REMOTE_ADDR'] ?? null;

// セッション
session_start();
$_SESSION['user_id'] = 1;

// Cookie
$theme = $_COOKIE['theme'] ?? 'light';

セキュリティ上の注意

  • 外部入力は信用しない$_GET / $_POST / $_COOKIE はクライアントが自由に書き換えられる
  • 必ずバリデーション・サニタイズ: 表示時は htmlspecialchars()、SQL はプレースホルダ
  • $_REQUEST は出所が混ざるため使用を避ける (どこから来た値か追跡しにくい)
  • セッション ID は HTTPS + HttpOnly + SameSite で保護
  • $_SERVER['HTTP_*'] 系はクライアント送信の生ヘッダ。HOST やリファラ等は改ざん可能
  • アップロードファイルは $_FILES[..]['tmp_name'] 経由で取得し、move_uploaded_file() で保存する

主要な $_SERVER の代表的キー

キー用途
REQUEST_METHODHTTP メソッド (GET / POST / 等)
REQUEST_URIリクエストされた URI
QUERY_STRINGクエリ文字列
HTTP_HOSTホスト名
HTTP_USER_AGENTUA
HTTP_REFERER遷移元 (改ざん可能・スペル注意)
REMOTE_ADDRクライアント IP
SERVER_NAMEサーバ名
HTTPSHTTPS で接続されたか
SCRIPT_NAME / SCRIPT_FILENAME実行中スクリプトのパス

フレームワーク利用時の注意

  • Laravel / Symfony 等のフレームワークでは、リクエストをRequest オブジェクト経由で扱うのが原則
  • スーパーグローバル変数を直接触ると、ミドルウェアや CSRF 等の保護が外れる可能性がある
  • テストの際にもフレームワークのテストヘルパでリクエストを差し替える方が安全

関連

編集
Post Share
子ページ
  1. $_SERVER
  2. $_GET
  3. $_POST
  4. $_ENV
  5. $_COOKIE
  6. $_SERVER
  7. $_FILES
同階層のページ
  1. 基本事項
  2. HTMLへの埋め込み
  3. 変数
  4. 可変変数
  5. 定数
  6. データ型
  7. キャスト
  8. エスケープ文字
  9. 配列
  10. 演算子
  11. 代入の際の注意点
  12. 条件分岐
  13. 繰り返し処理
  14. クラスとインスタンス
  15. コンストラクタ
  16. 関数
  17. スーパーグローバル変数
  18. スコープ
  19. staticについて
  20. yieldについて
  21. ファイルのアップロード方法
  22. DB接続方法
  23. SQL実行方法
  24. カプセル化の具体例
  25. 継承の構文
  26. オーバーライド
  27. ポリモーフィズム(多様性)の具体例
  28. 抽象クラス・メソッドの構文と具体例
  29. GET通信
  30. try catchで全てのエラーを拾う方法