Что такое 22527 в error_reporting 22527 из phpinfo - PullRequest
42 голосов
/ 13 января 2011

В моем локальном dev-файле я использую PHP версии 5.3.3-1ubuntu9.2.

Теперь, когда я вижу error_reporting, значение равно 22527.

Что такое 22527?

Я проверил http://www.php.net/manual/en/errorfunc.constants.php,, но не смог найти номер.

Может ли кто-нибудь сказать мне, что это такое?

Нужно ли мне изменить его на E_ALL |E_STRICT?

Заранее спасибо.

Ответы [ 3 ]

62 голосов
/ 13 января 2011

Это значение на самом деле растровая маска , сумма констант.

Итак, 22527

  16384 E_USER_DEPRECATED
+
  4096  E_RECOVERABLE_ERROR
+
  etc...

В вашем случае это E_ALL & ~E_DEPRECATED, он будет отображать все ошибки, кроме E_DEPRECATED.

Версии PHP ниже 5.4 также исключают E_STRICT ошибки (поскольку E_STRICT не входит в E_ALL до этой версии)

38 голосов
/ 13 января 2011

Это значение равно одному или нескольким из этих констант поразрядно сгруппированы вместе.

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
3 голосов
/ 17 мая 2012

НИКОГДА не используйте числовое значение для установки отчета об ошибках, поскольку значение этого значения может измениться , но значение констант (таких как E_ALL, E_STRICT и т. Д.), Скорее всего, не изменится:

Новый уровень error_reporting.Он принимает либо битовую маску, либо именованные константы.Настоятельно рекомендуется использовать именованные константы для обеспечения совместимости для будущих версий.По мере добавления уровней ошибок диапазон целых чисел увеличивается, , поэтому более старые целочисленные уровни ошибок не всегда будут вести себя как ожидалось .

(и обратите внимание, что с PHP 5.4E_ALL теперь включает в себя E_STRICT)

Если вы хотите, чтобы строжайшие отчеты были всегда и всегда, вы можете установить error_reporting на очень большое число, чтобы гарантировать (?), Что вы будете сообщать обо всех ошибках навсегда :

Использование констант PHP вне PHP, как в httpd.conf, не будет иметь никакого полезного значения, поэтому в таких случаях требуются целочисленные значения.И поскольку уровни ошибок будут добавляться со временем, максимальное значение (для E_ALL), вероятно, изменится.Поэтому вместо E_ALL рассмотрите возможность использования большего значения для охвата всех битовых полей с настоящего момента и в будущем, числовое значение, например 2147483647 (включает все ошибки, а не только E_ALL).

Проверьте ваш php.ini на значение error_reporting в удобочитаемом формате PHP-констант.Кажется, что функция phpinfo () всегда показывает числовое значение, а не константы.

Но лично я оставляю php.ini со значениями по умолчанию для отчетов об ошибках.Вместо этого я просто поместил функцию сообщения об ошибках поверх любого php-скрипта, над которым я работаю, чтобы переопределить значения по умолчанию.например:

error_reporting(E_ALL | E_STRICT);
...