PHP header()関数とは?リダイレクトの仕組みを中学生にもわかりやすく解説【Location・exit・ログイン判定】

2026年7月13日月曜日

Laravel PHP バックエンド プログラミング

t f B! P L

PHP header()関数とは?リダイレクトの仕組みを中学生にもわかりやすく解説

PHPを勉強していると、最初のうちは「header()って何をしているの?」と疑問に思う人がとても多いです。 見た目はただの1行ですが、実はWebサイトでは毎日のように使われる重要な処理です。

この記事では、実際のコードを例にしながら、header()関数の役割・HTTPヘッダの仕組み・exitが必要な理由・実務での使い方まで、中学生でも理解できるようにやさしく解説します。


結論:header()は「ブラウザへ移動してください」と伝える命令

今回のコードは、ログイン状態によって表示するページを切り替える「入口ページ」です。

<?php
require_once __DIR__ . '/auth.php';

if (isLoggedIn()) {
    header('Location: chat.php');
} else {
    header('Location: login.php');
}

exit;

このコードを日本語にすると、次のようになります。

  • ログイン済みならチャット画面へ移動
  • ログインしていなければログイン画面へ移動
  • その後は処理を終了する

つまり、このPHPファイルはアクセスした人を正しい画面へ案内する案内係の役割をしています。


処理の流れを順番に見てみよう

① auth.phpを読み込む

require_once __DIR__ . '/auth.php';

まずはログイン判定に必要なファイルを読み込みます。

  • require_once:同じファイルを一度だけ読み込む
  • __DIR__:現在のPHPファイルがあるフォルダ

auth.phpには、例えば次のような関数が入っていることが多いです。

// セッションにユーザー情報があるか確認する
function isLoggedIn()
{
    return isset($_SESSION['user_id']);
}

この関数は、「ログインしているかどうか」を調べるために使われます。


② ログイン状態を確認する

if (isLoggedIn()) {
    ...
}

isLoggedIn()の戻り値によって処理が変わります。

戻り値 意味 移動先
true ログイン済み chat.php
false 未ログイン login.php

header()は何をしているの?

PHPは通常、HTMLをブラウザへ送ります。

echo "Hello World";

しかし、header()を使うとHTMLではなく、HTTPヘッダという情報をブラウザへ送ります。

header('Location: chat.php');

実際には次のような通信になります。

HTTP/1.1 302 Found
Location: chat.php

ブラウザはこの情報を見ると、

「chat.phpへ移動してくださいという命令なんだな」

と判断して、自動的にページを切り替えます。


Locationとは何?

header()は次の書き方をします。

header('ヘッダ名: 値');

今回の場合は、

Location: chat.php

つまり、

  • ヘッダ名:Location
  • 値:chat.php

HTTPという通信ルールでは、Locationヘッダは「移動先のURL」を表す特別な意味を持っています。

そのため、ブラウザは自動的に指定されたページへ移動します。


なぜexitが必要なの?

初心者が見落としやすいポイントがexitです。

header('Location: chat.php');
exit;

もしexitを書かなければ、

header('Location: chat.php');

echo "Hello";

のように、その後の処理まで実行されてしまいます。

リダイレクトした後も処理が続くと、

  • 不要なデータベース処理
  • 不要なログ出力
  • 画面表示の不具合
  • セキュリティ事故

につながることがあります。

そのため実務では、

header('Location: chat.php');
exit;

をセットで書くのが定番です。


header()はなぜ最初に書かなければいけないの?

次のコードはエラーになります。

echo "テスト";

header('Location: chat.php');

理由は、HTTPでは送信する順番が決まっているからです。

  1. HTTPヘッダ
  2. HTML本文

一度HTMLを送信すると、ヘッダを書き換えることはできません。

そのため、 header()はHTMLを出力する前に実行する必要があります。


実務ではどんな場面で使われる?

  • ログイン後の画面遷移
  • ログアウト後のトップページ表示
  • 管理者以外をアクセス禁止ページへ移動
  • フォーム送信後の完了画面表示
  • 404ページへのリダイレクト
  • HTTPSへ強制移動

Webシステムでは非常によく登場するため、覚えておくと多くのPHPコードが読めるようになります。


初心者がよくある失敗

  • header()の後にexitを書かない
  • echoを書いてからheader()を実行する
  • セッションを開始せずログイン判定する
  • 相対パスと絶対パスを混同する
  • header()だけで処理が終わると思ってしまう

実務でのベストプラクティス

  • header()の直後に必ずexitを書く
  • リダイレクトは処理の最初に行う
  • 認証処理をauth.phpなどへまとめる
  • 共通処理は関数化して再利用する
  • 保守しやすいフォルダ構成を意識する

まとめ

header()はHTMLを表示するための関数ではなく、ブラウザへ命令を送るための関数です。

今回のコードでは、

  • auth.phpを読み込む
  • ログイン状態を確認する
  • ログイン済みならchat.phpへ移動
  • 未ログインならlogin.phpへ移動
  • exitで処理を終了する

という流れで動いています。

シンプルなコードですが、ログイン認証や管理画面など、実際のWeb開発では毎日のように使われる重要な仕組みです。header()の動きを理解すると、PHPのWebシステム全体の流れもぐっと理解しやすくなるでしょう。


初心者向け学習ポイント

  • header()の基本的な使い方
  • HTTPヘッダとHTML本文の違い
  • Locationヘッダによるリダイレクト
  • exitを書く理由
  • require_onceと__DIR__の役割
  • ログイン認証の基本的な流れ

実務での活用例

  • 会員サイトのログイン認証
  • ECサイトのマイページ
  • 管理画面へのアクセス制御
  • お問い合わせ完了画面への遷移
  • URL変更時のリダイレクト処理

次に学ぶべき関連記事候補

  • PHPセッション(Session)の仕組みを初心者向けに解説
  • require・require_once・include・include_onceの違い
  • PHPでログイン認証システムを作る方法
  • HTTPリクエストとHTTPレスポンスの基本
  • PHPで安全な認証機能を実装するベストプラクティス

このブログを検索

Welcome



旅するWebライター「Hide」のブログへようこそ!

2年間の世界一周を終え、今は旅の思い出を言葉にしながら、AIやプログラミングという新しい冒険を楽しんでいます。最新技術を味方につけて、もっと自由でクリエイティブな発信を続けていきます!

人気の投稿

QooQ