header("Location: ../error/");
教材でプログラムを確認しているとheader("Location: ../error/");という書き方がありました。私は普段header(“Location: ../error/error.php”);で実装してますが、何が違うのでしょうか?
header(“Location: ../error/index.php”);が正解
errorディレクトリにindex.htmlかindex.phpファイルが存在する場合は、ファイルが表示されるコードになっています。つまりファイル名がerror.phpの場合は、ファイルが表示されずにエラーになるというこです。
error/index.phpとerror/error.phpはどちらが正解?
エラー画面は「error/index.php」ではなく “明示的なファイル名” にする方がベストプラクティス。
error/
├── 404.php
├── 500.php
├── access_denied.php
└── general_error.php
✔ なぜ「index.php」はエラー画面に向かないのか?
① index.php は「そのディレクトリのメイン画面」という意味を持つ
- error/index.php → error フォルダの “通常ページ” に見える
- 404 とか 500 とか 意味が曖昧 になる
- 一目で用途が分かりにくい
→ 保守性が悪い・チーム開発で誤解を招く
② 本番環境では errorページは複数種類になる
- 404 Not Found
- 500 Internal Server Error
- 403 Forbidden
- CSRF エラー
- ログインなしアクセスエラー など
エラーは増えるため index.php 1つにまとめると 役割が見えない構造になる。
③ フレームワーク(Laravel, Symfony 等)でも error は明示ファイル名
Laravel:
resources/views/errors/404.blade.php
resources/views/errors/500.blade.php
✔ 「public ディレクトリ」などとは目的が違う
public/index.php → システムのエントリーポイント
error/index.php → エラーなのか通常ページなのか分からない
→ 役割が曖昧なディレクトリでは index.php は使わないのが実務的。
✔ プロレベルでの最良の構造(あなたの用途に最適)
あなたの PHP プロジェクトに合わせると、この形が最も良いです:
/error
├── notfound.php // 404
├── server_error.php // 500
├── unauthorized.php // 未ログイン
├── invalid_request.php // バリデーション・CSRF
└── general.php // その他
※「error/」に飛ばさず、必ずファイル指定が推奨。
✔ まとめ(簡潔)
- error/index.php は 可読性が低く非推奨
- プロ開発では エラー種類ごとに明示ファイルを作る
- public の index.php は “エントリーポイント”、error の index.php と役割が全く違う
- 実務では 404.php / 500.php / unauthorized.php … のように用途名を付ける が正解
