phpinfo的error_reporting 22527中的22527是什么

时间:2011-01-13 08:33:35

标签: php phpinfo

在我的本地开发环境中,我使用PHP版本5.3.3-1ubuntu9.2。

现在,当我看到error_reporting时,值为22527。

什么是22527?

我查了http://www.php.net/manual/en/errorfunc.constants.php,但找不到号码。

有谁能告诉我它是什么?

我是否需要将其更改为E_ALL | E_STRICT?

提前致谢。

3 个答案:

答案 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);