Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
error_reporting() / set_error_handler()対応: PHP 4(2000)
PHPのエラー報告レベルを設定し、カスタムエラーハンドラーでエラー処理を制御する関数です。
構文
// エラー報告レベルを設定・取得します。 error_reporting($level); // カスタムエラーハンドラーを設定します。 set_error_handler($callback, $error_levels); // ユーザー定義のエラーを発生させます。 trigger_error($message, $error_level); // PHP設定値を変更します。エラー表示の制御にも使用します。 ini_set($option, $value);
関数一覧
| 関数 | 概要 |
|---|---|
| error_reporting($level) | エラー報告レベルを設定します。引数を省略すると現在のレベルを返します。『E_ALL』ですべてのエラーを報告対象にします。 |
| set_error_handler($callback, $error_levels) | PHPのデフォルトエラーハンドラーに代わるカスタム関数を登録します。コールバックは『$errno, $errstr, $errfile, $errline』の4つの引数を受け取ります。 |
| trigger_error($message, $error_level) | プログラムから意図的にエラーを発生させます。第2引数で『E_USER_NOTICE』『E_USER_WARNING』『E_USER_ERROR』を指定できます。 |
| ini_set($option, $value) | PHPの設定値を実行時に変更します。『display_errors』や『log_errors』などの制御に使用します。 |
主なエラーレベル定数
| 定数 | 概要 |
|---|---|
| E_ALL | すべてのエラーと警告を報告します。開発環境ではこの設定を推奨します。 |
| E_ERROR | 致命的な実行時エラーです。スクリプトの実行が停止します。 |
| E_WARNING | 実行時の警告です。スクリプトの実行は継続されます。 |
| E_NOTICE | 実行時の注意です。未定義変数へのアクセスなどで発生します。 |
| E_DEPRECATED | 将来のバージョンで動作しなくなるコードに対する警告です。 |
| E_STRICT | コードの互換性や将来の問題に関する提案です。PHP 8.0 で E_ALL に統合されました。 |
サンプルコード
<?php
// すべてのエラーを報告対象にします。開発環境では必須の設定です。
error_reporting(E_ALL);
ini_set('display_errors', '1'); // エラーを画面に表示します。
// 本番環境ではエラーを画面に表示せず、ログに記録します。
error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/var/log/php_errors.log');
// 現在のエラー報告レベルを取得します。
$current = error_reporting();
echo $current; // 『E_ALL』の場合は『32767』と出力されます。
// カスタムエラーハンドラーを設定します。
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
$date = date('Y-m-d H:i:s');
$log = "[$date] エラー($errno): $errstr — $errfile:$errline\n";
error_log($log, 3, '/var/log/app_errors.log');
return true; // 『true』を返すとPHPの標準エラーハンドラーを抑制します。
});
// trigger_error() でユーザー定義のエラーを発生させます。
function divide($a, $b) {
if ($b == 0) {
trigger_error("0で除算しようとしました", E_USER_WARNING);
return false;
}
return $a / $b;
}
$result = divide(10, 0); // カスタムハンドラーが警告をログに記録します。
// 特定のエラーレベルを除外して報告する例です。
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
概要
『error_reporting()』はPHPがどのレベルのエラーを報告するかを制御する関数です。開発環境では『E_ALL』を設定してすべてのエラーを表示し、本番環境では『display_errors』を無効にしてエラーログに記録する設定が推奨されます。本番環境でエラーを画面に表示すると、ファイルパスや内部構造が外部に漏洩するリスクがあるためです。
『set_error_handler()』を使うと、エラー発生時の処理を自由にカスタマイズできます。ログへの記録、メール通知、エラーページの表示など、アプリケーションの要件に応じた処理を実装できます。ただし『E_ERROR』や『E_PARSE』などの致命的エラーはカスタムハンドラーでは捕捉できないため、それらは『register_shutdown_function()』で処理する必要があります。
例外処理による構造的なエラーハンドリングについては『try / catch』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。