PHP の error_reporting ディレクティブとは
phpinfo() を実行すると、 error_reporting ディレクティブという設定値が整数値として表示されます。
この error_reporting ディレクティブは、エラー出力レベルを設定するもので、以下のエラーの種類それぞれについて、どのエラーを出力するかを 16ビットのビットマスクで構成し、10進数で表したものとなっています。
設定値 | 定義済み変数 | 説明 |
---|---|---|
1 | E_ERROR | 重大な実行時エラー。 |
2 | E_WARNING | 実行時の警告 (致命的なエラーではない)。 |
4 | E_PARSE | コンパイル時のパースエラー。 |
8 | E_NOTICE | 実行時の注意メッセージ。 |
16 | E_CORE_ERROR | PHPの初期始動時点での致命的なエラー。 |
32 | E_CORE_WARNING | (致命的ではない)警告。 |
64 | E_COMPILE_ERROR | コンパイル時の致命的なエラー。 |
128 | E_COMPILE_WARNING | コンパイル時の警告(致命的ではない) |
256 | E_USER_ERROR | ユーザーによって発行されるエラーメッセージ。 |
512 | E_USER_WARNING | ユーザーによって発行される警告メッセージ。 |
1024 | E_USER_NOTICE | ユーザーによって発行される注意メッセージ。 |
2048 | E_STRICT | コードの互換性を維持するためのコードの変更についての提案メッセージ。 |
4096 | E_RECOVERABLE_ERROR | キャッチできる致命的なエラー。 |
8192 | E_DEPRECATED | 実行時の注意。将来のバージョンで動作しなくなるコードについての警告。 |
16384 | E_USER_DEPRECATED | ユーザー定義の E_DEPRECATED同等の警告メッセージ。 |
error_reporting の設定値をわかりやすく
しかしながら、これらのビットがどのエラーを表しているかを覚えるのもたいへんで、ビットマスクの計算も面倒ですよね。
そこで、 error_reporting の整数値をエラーの定義済み定数に分解する小さなプログラムを作成しました。
error_reporting.php
<?php
$level = $argv[1];
$types = array(
'E_ERROR', 'E_WARNING', 'E_PARSE', 'E_NOTICE',
'E_CORE_ERROR', 'E_CORE_WARNING', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING',
'E_USER_ERROR', 'E_USER_WARNING', 'E_USER_NOTICE', 'E_STRICT',
'E_RECOVERABLE_ERROR', 'E_DEPRECATED', 'E_USER_DEPRECATED'
);
foreach ($types as $type) {
eval ("\$error['$type'] = $type ;");
$on = ($level & $error[$type]) == 0 ? '-' : '+';
echo implode(':', array($on,$type,$error[$type])).PHP_EOL;
}
使い方
php error_reporting.php [error_reportingの設定値]
error_reporting の設定値を引数にして、実行すると以下のように出力されます。各定義済み変数の左が「+」となっていれば出力されるエラー、「-」の場合は表示されないエラーです。
$ php error_reporting.php 22519
+:E_ERROR:1
+:E_WARNING:2
+:E_PARSE:4
-:E_NOTICE:8
+:E_CORE_ERROR:16
+:E_CORE_WARNING:32
+:E_COMPILE_ERROR:64
+:E_COMPILE_WARNING:128
+:E_USER_ERROR:256
+:E_USER_WARNING:512
+:E_USER_NOTICE:1024
-:E_STRICT:2048
+:E_RECOVERABLE_ERROR:4096
-:E_DEPRECATED:8192
+:E_USER_DEPRECATED:16384
よろしければお納めください。
参考