この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:2
ページ更新者:atom
更新日時:2026-06-10 06:24:45

タイトル: スーパーグローバル変数

本稿は 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 等の保護が外れる可能性がある
  • テストの際にもフレームワークのテストヘルパでリクエストを差し替える方が安全

関連