PHP.iniでのエラーレポート設定を完全ガイド!初心者でもわかるerror_reportingとdisplay_errors
生徒
「PHPのエラーって、どこで設定を管理しているんですか?画面に出たり出なかったりしてよくわかりません…。」
先生
「PHPでは、エラーの表示や記録のルールを PHP.ini という設定ファイルで管理しているんですよ。特に大切なのが error_reporting と display_errors という2つの設定です。」
生徒
「それってエラーメッセージを出すかどうかを変更できるってことですか?」
先生
「その通り。開発中はエラーを画面に出した方が便利ですが、本番環境では危険なので非表示にしたり、ログに記録したりします。それでは詳しく見ていきましょう。」
1. PHP.iniとは?エラーハンドリングの中心になる設定ファイル
PHP.ini(ピーエイチピー インアイニ) は、PHPの動作ルールをまとめた設定ファイルです。 初心者はあまり触らない場所ですが、エラーハンドリングを理解するためには必ず知っておく必要があります。
この中で、PHPのエラーに関する設定を行う項目がいくつかあり、その中でも特に重要なのが
error_reporting と display_errors です。
この2つだけでも正しく理解すれば、PHPのエラーが「見えない」「突然画面に大量の英語が出てくる」といった問題を根本から解決できます。
2. error_reportingとは?どのレベルのエラーを検出するか決める設定
error_reporting は「どのレベルのエラーを報告するか」を決める大切な設定です。
PHPにはいろいろな種類のエラーがあり、初心者には特に違いが分かりにくいですが、ここでは分かりやすく説明します。
たとえば:
- Warning(警告)…プログラムは動くけど問題がある状態
- Notice(注意)…変数が未定義など、軽微な問題
- Fatal Error(致命的エラー)…プログラムが完全に停止する重大なエラー
error_reporting を設定すると、こうしたエラーのどれを捕まえるかを選べます。
代表的な設定がこちらです。
error_reporting = E_ALL
E_ALL(イーオール) は「すべてのエラーを報告する」という意味で、開発環境ではこれが必須です。
3. display_errorsとは?エラーメッセージを画面に表示するかどうか決める設定
初心者がよく混乱するのが display_errors です。
これは「発生したエラーを画面に表示するかどうか」を切り替える設定です。
開発中はエラーが画面に出た方が便利ですが、本番環境では絶対に表示してはいけません。
なぜならエラーメッセージにはファイルのパスや具体的なエラー内容など、攻撃者に利用される可能性がある情報が含まれているからです。
PHP.iniの設定例はこちら:
display_errors = On
On にすると画面にエラーが表示され、Off にすると表示されません。 本番環境では必ず Off に設定し、かわりにログファイルへ記録するようにします。
4. 開発環境と本番環境で設定を変える理由
プログラミング初心者が最も間違えやすい部分が「開発環境と本番環境を同じ設定にしてしまう」ことです。
● 開発環境(自分のパソコンなど)
エラーを画面に表示して問題ありません。
error_reporting = E_ALL
display_errors = On
● 本番環境(公開しているWebサーバー)
絶対にエラーを画面に表示してはいけません。
error_reporting = E_ALL
display_errors = Off
log_errors = On
log_errors は「エラーをログに記録する」設定です。これと組み合わせることで、安全に問題を追跡できます。
5. error_reporting の値はPHPコードでも変更できる
PHP.iniだけでなく、PHPコードの中からエラーレポートの設定を変更することもできます。 ただし、基本的にはPHP.iniで設定する方が推奨されています。
error_reporting(E_ALL);
ini_set("display_errors", "1");
6. 典型的なエラーハンドリング構成
実際のWeb制作やシステム開発では次のような構成が一般的です。
- 開発:画面に表示しながら修正
- 本番:ログに記録してユーザーには表示しない
- 例外は set_exception_handler() でカスタム処理
- エラーは set_error_handler() でキャッチ
このように「PHP.ini + コード側のハンドリング」を組み合わせることで、安全で安定したエラーハンドリング環境を構築できます。