PHPのerror reporting levelは、bit形式で表現されていて、error_reporting関数で取得しても、何が設定されているのかすぐにはわかりづらいと思います。
ちょっとしたプログラムですが、error_reporting_levelを文字列形式で出力するプログラムを書いてみました。
<?php class PHPUtils { private const ERROR_CODE_TO_STRING = [ E_ERROR => 'E_ERROR', E_WARNING => 'E_WARNING', E_PARSE => 'E_PARSE', E_NOTICE => 'E_NOTICE', E_CORE_ERROR => 'E_CORE_ERROR', E_CORE_WARNING => 'E_CORE_WARNING', E_COMPILE_WARNING => 'E_COMPILE_WARNING', E_USER_ERROR => 'E_USER_ERROR', E_USER_WARNING => 'E_USER_WARNING', E_USER_NOTICE => 'E_USER_NOTICE', E_STRICT => 'E_STRICT', E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', E_DEPRECATED => 'E_DEPRECATED', E_USER_DEPRECATED => 'E_USER_DEPRECATED', ]; public static function getCurrentErrorLevels($currentLevel) { // E_ALLはすべてのエラーを表現しているので、特別に処理。 if(E_ALL === $currentLevel) { return 'E_ALL'; } $result = []; foreach(self::ERROR_CODE_TO_STRING as $code => $string) { if($currentLevel & $code) { $result[] = $string; } } return $result; } }
下記は使用例です。
<?php // そのまま表示 echo "errror reporting level: ".error_reporting()."\n"; // getCurrentErrorLevelsメソッドを使って設定されているすべてのerror reporting levelを配列で取得 // 見やすくするためにjson_encodeを使って表示を整形 $errorReportingLevels = PHPUtils::getCurrentErrorLevels(error_reporting()); echo "errror reporting level (string expression): ".json_encode(errorReportingLevels, JSON_PRETTY_PRINT)."\n"; // 下記は出力例です。 // errror reporting level: 22527 // errror reporting level (string expression): [ "E_ERROR", "E_WARNING", "E_PARSE", "E_NOTICE", "E_CORE_ERROR", "E_CORE_WARNING", "E_COMPILE_WARNING", "E_USER_ERROR", "E_USER_WARNING", "E_USER_NOTICE", "E_RECOVERABLE_ERROR", "E_USER_DEPRECATED" ] // error_reporting levelを明に変更してみます。 error_reporting(E_ERROR|E_NOTICE); echo error_reporting(); echo json_encode(Util\PHPUtils::getCurrentErrorLevels(error_reporting()), JSON_PRETTY_PRINT); // 下記のような出力例になるはずです。 // errror reporting level: 9 // errror reporting level (string expression): [ "E_ERROR", "E_NOTICE", ]
コメント