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 + コード側のハンドリング」を組み合わせることで、安全で安定したエラーハンドリング環境を構築できます。
まとめ
■ PHP.iniとエラーレポート設定の重要ポイント
今回は、PHPのエラーハンドリングにおいて非常に重要な PHP.ini の設定について、
error_reporting と display_errors を中心に解説しました。
一見すると単純な設定に見えますが、この2つを正しく理解していないと、エラーが表示されない、
または本番環境で重大な情報漏洩につながるといったトラブルが発生します。
error_reporting は「どの種類のエラーを検出するか」を決める設定であり、 display_errors は「そのエラーを画面に表示するかどうか」を制御する役割を持っています。 この役割の違いを理解することが、PHPエラー対策の第一歩です。
■ 開発環境と本番環境の設定の違い
PHPのエラー設定では、「開発環境」と「本番環境」で設定を切り替えることが基本です。 開発中はエラーを画面に表示することで問題の特定を迅速に行うことができますが、 本番環境ではユーザーにエラー内容を見せることはセキュリティ上非常に危険です。
そのため、本番環境では display_errors = Off にし、
log_errors = On を有効にしてログファイルへ記録する運用が一般的です。
これにより、ユーザーには影響を与えずに内部で問題を把握できます。
; 開発環境
error_reporting = E_ALL
display_errors = On
; 本番環境
error_reporting = E_ALL
display_errors = Off
log_errors = On
■ PHPコードからのエラーハンドリング設定
PHP.iniだけでなく、PHPコード内からエラー設定を変更することも可能です。 テストや一時的な確認の際には便利ですが、運用上は設定ファイルで一元管理する方が安全です。
error_reporting(E_ALL);
ini_set("display_errors", "1");
また、より高度なエラーハンドリングとして set_error_handler() や
set_exception_handler() を利用することで、
独自のログ出力やユーザー向けメッセージの制御も可能になります。
■ 実務で意識すべきエラーハンドリングの考え方
実際のシステム開発では、単にエラーを表示するだけでなく、 「ユーザー体験」と「セキュリティ」を両立させることが重要です。 エラーが発生した場合でも、ユーザーには分かりやすいメッセージを表示しつつ、 詳細な情報はログにのみ残す設計が求められます。
また、エラーを放置せず、開発段階でしっかりと解消していくことが、
安定したWebアプリケーションやPHPシステム構築につながります。
特に E_ALL を有効にしておくことで、
小さなミスや将来的なバグの種も早期に発見できます。
■ まとめの総括
PHPのエラーレポート設定は、初心者のうちは軽視されがちですが、
実はシステムの品質や安全性を大きく左右する非常に重要な要素です。
今回学んだ error_reporting と display_errors の役割を正しく理解し、
環境ごとに適切な設定を行うことで、トラブルの少ない堅牢なアプリケーション開発が実現できます。
生徒
「PHPのエラー設定って、ただ表示するかしないかだけだと思っていましたが、 実はすごく重要な意味があったんですね。」
先生
「そうなんです。特に本番環境でエラーを表示してしまうと、 システムの内部情報が漏れてしまう可能性があるので注意が必要です。」
生徒
「開発中は E_ALL と display_errors = On にして、
本番では非表示にする、という切り替えが大事なんですね。」
先生
「その通りです。さらにログに記録する設定を組み合わせることで、 安全にエラーを管理できます。」
生徒
「今後はエラーが出たときに焦らず、設定を確認するようにします!」
先生
「良い心がけですね。エラーは敵ではなく、成長のヒントです。 正しく扱えるようになれば、開発力は一気に伸びますよ。」