PHP スーパーグローバル変数まとめ

PHP スーパーグローバル変数まとめ
Contents

スーパーグローバル変数とは?

PHPでプログラムを書いていると、フォームの入力内容を受け取ったり、URLに含まれる値を使ったり する場面がよく出てきます。
こうした「外部から渡されるデータ」や「サーバーの情報」を簡単に扱えるように、PHPには あらかじめ特別な変数 が用意されています。これが スーパーグローバル変数(Superglobal variables) です。

  • PHPが最初から用意している「特別な変数」
  • どこからでも(関数の中でも)使える → グローバルスコープで常に利用可能
  • すべて 連想配列 の形になっている
  • フォーム入力・URLパラメータ・ファイルアップロードなどに欠かせない

例えば「ログインフォームで入力したユーザー名を受け取る」ときは $_POST を、
「検索ページで ?keyword=PHP のようにURLに含まれる値を使う」ときは $_GET を使います。

また、スーパーグローバル変数を使うときには セキュリティ対策(htmlspecialchars() など) を忘れないことが大切です。外部から来たデータをそのまま表示すると、クロスサイトスクリプティング(XSS)と呼ばれる攻撃の原因になるからです

主なスーパーグローバル変数一覧

スクロールできます
変数名内容・用途の例
$_POSTフォームで POST送信 された値を取得(ログイン・会員登録など)
$_GETURLに含まれる GETパラメータ を取得(検索キーワード、ページ切替など)
$_REQUESTPOST・GET・COOKIE の値をまとめて取得(便利だが区別できないため基本は非推奨)
$_SERVERサーバー情報や現在のURL、ヘッダーなどを取得
例:$_SERVER['REQUEST_METHOD'] で「GETかPOSTか」を判定
$_SESSIONユーザーごとの状態を一時的に保存(ログイン状態の保持など)
$_COOKIEブラウザに保存されたクッキーの値を取得(ログイン情報やトラッキングなど)
$_FILESファイルアップロード時に使う(画像やPDFなどを処理する)
$_ENV環境変数を取得(サーバー設定や環境依存の情報など)
$_GLOBALSグローバル変数すべてを配列で取得(特殊用途。ほとんど使わない)

スーパーグローバル変数は「どこから来たデータか」が命

スーパーグローバル変数はとても便利ですが、最も大事なのは そのデータが「どこから来たか」 を常に意識することです。

これらの変数の中身は、ほとんどが「ユーザーが操作できる情報」です。

例えば…

  • フォームに入力された文字
  • URLに付けられたパラメータ
  • アップロードされたファイル名
  • ブラウザが送ってくる情報

これらはすべて、ユーザー側で自由に書き換えることが可能です。

つまり、スーパーグローバル変数は便利な反面、 攻撃の入り口にもなるという性質を持っています。

外部データの流れ(イメージ)

ユーザーの入力・操作
        ↓
ブラウザがデータ送信
        ↓
サーバー(PHP)
        ↓
スーパーグローバル変数に格納

この仕組みを理解すると、「なんでセキュリティ対策が必要なのか」が自然に見えてきます。

$_POST の使い方(フォーム送信)

ログインやお問い合わせフォームなどで使われるのが $_POST です。

▼ フォーム側

<form method="post">
  名前:<input type="text" name="username">
  <button>送信</button>
</form>

▼ PHP側

<?php
$name = htmlspecialchars($_POST['username'], ENT_QUOTES);
echo "こんにちは、{$name}さん";
?>

ここで重要なのが

htmlspecialchars()

これを入れないと、悪意あるコードを入力された場合にページが改ざんされる危険があります(XSS攻撃=エスキューエルインジェクション)

$_GET の使い方(URLパラメータ)

検索機能やページ切り替えでよく使われるのが $_GET です。

URL例:

search.php?keyword=PHP

PHP側:

<?php
$keyword = htmlspecialchars($_GET['keyword'], ENT_QUOTES);
echo "検索キーワード:" . $keyword;
?>

GETはURLに値が見えるため、改ざんされやすいという特徴があります。

$_POST と $_GET の違い

項目$_POST$_GET
データの見え方URLに表示されないURLに表示される
主な用途ログイン・登録検索・ページ移動
データ量多く送れる制限あり
改ざんのしやすさやや低い高い

$_SESSION(ログイン状態の保持)

SESSIONは「ページをまたいでデータを保存」するための仕組みです。

<?php
session_start();
$_SESSION['user_name'] = "tanaka";
?>

別ページ:

<?php
session_start();
echo $_SESSION['user_name'];
?>

これにより、

  • ログイン状態
  • カート情報
  • 一時的なメッセージ

などを保持できます。

ページの最初にsession_start() を忘れると動きません。

$_FILES(ファイルアップロード)

画像やPDFをアップロードするときに使います。

<form method="post" enctype="multipart/form-data">
  <input type="file" name="image">
  <button>送信</button>
</form>
<?php
move_uploaded_file($_FILES['image']['tmp_name'], 'uploads/' . $_FILES['image']['name']);
?>

実務ではさらに

  • ファイルサイズ制限
  • 拡張子チェック
  • 保存先の安全対策

が必要になります。

よくやるミス

ミス原因
Undefined index入力がないのに使用
SESSIONが動かないsession_start() を書いていない
XSS脆弱性htmlspecialchars() を忘れている
POSTなのに$_GETで取得methodを確認していない

セキュリティ上の最重要ポイント

スーパーグローバル変数の値は 絶対に信頼してはいけない

// 危険
echo $_GET['name'];
// 安全
echo htmlspecialchars($_GET['name'], ENT_QUOTES);

スーパーグローバル変数は

「ユーザーから届いたデータを受け取る窓口」

ですが同時に

「攻撃が入り込む入口」

でもあります。

そのため常に

  • 入力チェック
  • エスケープ処理
  • 型の確認

を行うことが大切です。これらをしっかりと理解すれば、フォーム処理・ログイン機能・アップロード機能 など安心してPHP開発できます。

  • URLをコピーしました!
Contents