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では送信する順番が決まっているからです。
- HTTPヘッダ
- 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で安全な認証機能を実装するベストプラクティス







0 件のコメント:
コメントを投稿