Собственный ли обработчик ошибок 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
всегда сохраняет текущее состояние в.