Собственный ли обработчик ошибок PHP учитывает конфигурацию PHP?

Я был бы рад, если бы кто-то мог объяснить мне архитектуру обработки ошибок PHP. Некоторые конкретные вопросы:

  • На каком этапе обработчик ошибок по умолчанию считывает соответствующие параметры конфигурации PHP?
  • Пользовательский обработчик ошибок полностью игнорирует эти параметры?
  • Как сделать так, чтобы пользовательский обработчик ошибок учитывал конфигурацию?

1 ответ

Решение

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

Пример set_error_handler сначала проверяет текущий активный уровень ошибки и сравнивает его с первым параметром обратного вызова (поразрядно и), который обозначает текущий тип ошибки:

if (!(error_reporting() & $errno)) {

Но для первоначального тестирования, если вы действительно должны печатать ошибки, вам также потребуется:

ini_get("display_errors") or return;

Или реагировать на дополнительные настройки и эмулировать обработчик ошибок по умолчанию, даже ini_get("html_errors") и т.д. Если вы не сделаете все это вручную, ваш пользовательский обработчик ошибок будет отображать все ошибки. Они не фильтруются, колбэк получает все.


Обработчик ошибок PHP по умолчанию php_error_cb вокруг линии 850 здесь:
http://svn.php.net/viewvc/php/php-src/trunk/main/main.c?revision=309647&view=markup#855

Это делает немного больше, но также запрашивает реестр ini. Это где error_reporting всегда сохраняет текущее состояние в.

Другие вопросы по тегам