47

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

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

什么是 22527?

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

谁能告诉我它是什么?

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

提前致谢。

4

4 回答 4

68

这个值实际上是位图掩码,是常量的总和。

所以,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

于 2011-01-13T08:43:48.040 回答
44

该值是这些常量中的一个或多个按位或在一起的。

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
于 2011-01-13T08:41:27.120 回答
3

切勿使用数值来设置错误报告,因为该值的含义可能会改变,但常量(如 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);
于 2012-05-17T05:30:02.163 回答
0
$ 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

于 2021-10-07T07:06:09.663 回答