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",
]
コメント