《PHP8上級試験対策》error_reporting と display_errors の違いを図解で理解しよう

  • URLをコピーしました!

はじめに

PHPでは「エラーの検出」と「エラーの出力」をそれぞれ別に制御できます。
この仕組みを理解していないと、「あれ?警告が出ない」「ログにはあるのに画面では見えない」といった混乱が起こりがちです。
この記事では、error_reporting()display_errors の違いを、実行例と図解を交えて整理します。

キーワード: error_reporting / display_errors / PHPエラー制御 / stderr / E_ALL

目次

🧠 そもそもエラーには「検出」と「出力」がある

PHPではエラーが発生したときに、
1️⃣ どのエラーを検出するか(=報告レベル)
2️⃣ 検出したエラーを画面に出すか(=出力設定)
を別々に決められます。

これをそれぞれ設定するのが以下の2つです。

設定項目概要設定例
error_reporting()どのレベルのエラーを検出するかerror_reporting(E_ALL)
display_errors検出したエラーを画面出力するか'1':出力 / '0':非出力 / 'stderr':標準エラー出力

🧩 設定の流れを図で理解しよう!

┌──────────────────────────────┐
│          PHPエラー処理の流れ    │
├──────────────────────────────┤
│ (1) エラー発生!               │
│ ↓                            │
│ (2) error_reporting の判定    │
│     ├─ OFF → 無視(処理終了)   │
│     └─ ON  → 検出(次へ)      │
│ ↓                            │
│ (3) display_errors の判定     │
│     ├─ '0' → 出力せずログなどに記録 │
│     ├─ '1' → ブラウザなどに出力 │
│     └─ 'stderr' → 標準エラー出力へ │
└──────────────────────────────┘

🧪 実験コード

<?php
declare(strict_types=1);

// すべてのエラーを検出する
error_reporting(-1);

//
// ① 画面出力OFF
ini_set('display_errors', '0');
echo "display_errors 0\n";
var_dump($arr[0]); // 未定義変数

//
// ② エラー報告OFF
error_reporting(0);
echo "error_reporting 0\n";
var_dump($arr[0]);

//
// ③ 画面出力ON & エラー報告ON
ini_set('display_errors', '1');
error_reporting(E_ALL);
echo "display_errors 1 & error_reporting E_ALL\n";
var_dump($arr[0]);

🖥 実行結果

display_errors 0
NULL
error_reporting 0
NULL
display_errors 1 & error_reporting E_ALL

Warning: Undefined variable $arr in /var/www/html/part2/p89.php on line 17
Warning: Trying to access array offset on value of type null in ...
NULL

🔍 各設定の動き

状況error_reportingdisplay_errors挙動
-1(全検出)0(非表示)エラーを検出するが出力しない
0(検出しない)0(非表示)そもそも検出しない
E_ALL(全検出)1(出力)エラーを検出し画面に出力

💡 試験対策ポイント

  • error_reporting() …「どのレベルのエラーを検出するか」
  • display_errors …「検出したエラーを画面に出すか」
  • 両方ONにしないと画面には出ない(開発時ON・本番時OFFが基本)
  • CLI実行時は 'stderr' に出す設定も有効(ログ分離が便利)

まとめ

項目意味設定例
error_reporting検出するエラーレベルを決定E_ALL, 0, -1
display_errorsエラーを画面に出力するか'1', '0', 'stderr'
典型ミスdisplay_errors=1でもerror_reporting=0なら出ない🚫
正解パターン両方ONで警告が表示される

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次