在我的本地开发环境中,我使用 PHP 版本 5.3.3-1ubuntu9.2。
现在,当我看到 error_reporting 时,该值为 22527。
什么是 22527?
我检查了http://www.php.net/manual/en/errorfunc.constants.php,但找不到号码。
谁能告诉我它是什么?
我需要将其更改为 E_ALL | E_STRICT ?
提前致谢。
在我的本地开发环境中,我使用 PHP 版本 5.3.3-1ubuntu9.2。
现在,当我看到 error_reporting 时,该值为 22527。
什么是 22527?
我检查了http://www.php.net/manual/en/errorfunc.constants.php,但找不到号码。
谁能告诉我它是什么?
我需要将其更改为 E_ALL | E_STRICT ?
提前致谢。
这个值实际上是位图掩码,是常量的总和。
所以,22527 是
16384 E_USER_DEPRECATED
+
4096 E_RECOVERABLE_ERROR
+
etc...
在你的情况下E_ALL & ~E_DEPRECATED
,它会显示所有错误,除了E_DEPRECATED
.
低于 5.4 的 PHP 版本也将排除E_STRICT
错误(因为在该版本之前E_STRICT
不包括在内)E_ALL
该值是这些常量中的一个或多个按位或在一起的。
phpinfo()
通常显示数值而不是 INI 文件中使用的常量或简写。这是一个将值映射回常量的示例:
<?php
$error_reporting_value = 22527;
$constants = 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",
"E_ALL"
);
$included = array();
$excluded = array();
foreach ($constants as $constant) {
$value = constant($constant);
if (($error_reporting_value & $value) === $value) {
$included[] = $constant;
} else {
$excluded[] = $constant;
}
}
echo "error reporting " . $error_reporting_value . PHP_EOL;
echo "includes " . implode(", ", $included) . PHP_EOL;
echo "excludes " . implode(", ", $excluded) . PHP_EOL;
输出:
error reporting 22527
includes 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_RECOVERABLE_ERROR, E_USER_DEPRECATED
excludes E_STRICT, E_DEPRECATED, E_ALL
切勿使用数值来设置错误报告,因为该值的含义可能会改变,但常量(如 E_ALL、E_STRICT 等)的含义可能不会:
新的 error_reporting 级别。它采用位掩码或命名常量。强烈建议使用命名常量以确保与未来版本的兼容性。随着错误级别的增加,整数的范围会增加,因此旧的基于整数的错误级别将不会总是像预期的那样表现。
(请注意,从 PHP 5.4 开始,E_ALL 现在包括 E_STRICT)
如果您想要永远和永远最严格的报告,您可以将 error_reporting 设置为一个非常大的数字,以保证(?)您将永远报告所有错误:
在 PHP 之外使用 PHP 常量(如在 httpd.conf 中)将没有任何用处,因此在这种情况下需要整数值。并且由于错误级别会随着时间的推移而增加,最大值(对于 E_ALL)可能会改变。所以代替 E_ALL考虑使用一个更大的值来覆盖从现在到未来的所有位字段,一个像 2147483647 这样的数值(包括所有错误,而不仅仅是 E_ALL)。
检查您的 php.ini 以获取人类可读的 PHP 常量格式的 error_reporting 值。phpinfo() 函数似乎总是显示数值而不是显示常量。
但是,就我个人而言,我将 php.ini 保留为错误报告的默认值。相反,我只是将错误报告功能放在我正在处理的任何 php 脚本的顶部以覆盖默认值。例如:
error_reporting(E_ALL | E_STRICT);
$ php -i | grep error_reporting
o/p 为 22527
转到 https://maximivanov.github.io/php-error-reporting-calculator/
在 Resulting Error Level 框中输入 22527。
O/p 是 E_ALL & ~E_STRICT & ~E_DEPRECATED
或者
$arr = array_flip(array_slice(get_defined_constants(true)['Core'], 0,15));
$needToRemove = array('E_ALL','E_STRICT','E_DEPRECATED');
$filtered = array_diff($arr, $needToRemove);
print_r($filtered);
echo array_sum(array_flip($filtered));
o/p 是
Array
(
[1] => E_ERROR
[4096] => E_RECOVERABLE_ERROR
[2] => E_WARNING
[4] => E_PARSE
[8] => E_NOTICE
[16] => E_CORE_ERROR
[32] => E_CORE_WARNING
[64] => E_COMPILE_ERROR
[128] => E_COMPILE_WARNING
[256] => E_USER_ERROR
[512] => E_USER_WARNING
[1024] => E_USER_NOTICE
[16384] => E_USER_DEPRECATED
)
22527