2
0

More than 1 year has passed since last update.

error_reporting ディレクティブ

Last updated at Posted at 2022-01-30

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

よろしければお納めください。

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0