在我的本地开发环境中,我使用PHP版本5.3.3-1ubuntu9.2。
现在,当我看到error_reporting时,值为22527。
什么是22527?
我查了http://www.php.net/manual/en/errorfunc.constants.php,但找不到号码。
有谁能告诉我它是什么?
我是否需要将其更改为E_ALL | E_STRICT?
提前致谢。
答案 0 :(得分:62)
这个值实际上是bitmap mask,是常量的总和。
所以,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
)
答案 1 :(得分:37)
此值是these constants按位的一个或多个。
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
答案 2 :(得分:3)
永远不要使用数值来设置错误报告,因为meaning of that value can change但常量的含义(如E_ALL,E_STRICT等)可能不会:
新的error_reporting级别。它采用位掩码或命名常量。强烈建议使用命名常量以确保未来版本的兼容性。随着错误级别的增加,整数范围会增加,因此较旧的基于整数的错误级别并不总是按预期运行。
(请注意,从PHP 5.4开始,E_ALL现在包含E_STRICT)
如果您想要永久性地进行最严格的报告,可以将error_reporting设置为一个非常大的数字,以保证(?)you will report all errors forever:
在PHP之外使用PHP常量,就像在httpd.conf中一样,没有用处,所以在这种情况下需要整数值。由于错误级别会随着时间的推移而增加,因此最大值(对于E_ALL)可能会发生变化。因此,代替E_ALL 考虑使用更大的值来覆盖从现在开始到将来的所有位字段,数值如2147483647 (包括所有错误,而不仅仅是E_ALL)。
以人类可读的PHP常量格式检查php.ini中error_reporting的值。 phpinfo()函数似乎总是显示数值而不是显示常量。
但是,就个人而言,我将php.ini保留为错误报告的默认值。相反,我只是将错误报告功能放在我正在处理的任何PHP脚本的顶部以覆盖默认值。 e.g:
error_reporting(E_ALL | E_STRICT);