Обработка Ошибок
Глава 15. Обработка ошибок
В РНР есть несколько типов ошибок и предупреждений:
Таблица 15-1. Типы ошибок PHP
Значение | Константа | Описание | Примечание |
---|---|---|---|
1 | E_ERROR | фатальные ошибки времени выполнения | |
2 | E_WARNING | предупреждения времени выполнения (нефатальные ошибки) | |
4 | E_PARSE | ошибки разбора времени компиляции | |
8 | E_NOTICE | уведомления времени выполнения (менее серьёзные, чем предупреждения) | |
16 | E_CORE_ERROR | фатальные ошибки при начальном старте PHP | только PHP 4 |
32 | E_CORE_WARNING | предупреждения (нефатальные ошибки) при начальном старте РНР | только PHP 4 |
64 | E_COMPILE_ERROR | фатальные ошибки времени компиляции | только PHP 4 |
128 | E_COMPILE_WARNING | предупреждения времени компиляции (нефатальные ошибки) | только PHP 4 |
256 | E_USER_ERROR | генерируемое пользователем сообщение об ошибке | только PHP 4 |
512 | E_USER_WARNING | генерируемое пользователем предупреждение | только PHP 4 |
1024 | E_USER_NOTICE | генерируемое пользователем уведомление | только PHP 4 |
E_ALL | всё вышеуказанное, как поддерживаемое |
Вышеуказанные значения (цифровые или символьные) используются для построения битовой маски, которая специфицирует выводимое сообщение об ошибке. Вы можете использовать битовые операции для маскирования определённых типов ошибок. Обратите внимание, что только '|', '~', '!' и '&' будут понятны в php.ini и что никакие битовые операции не будут понятны в php3.ini.
В PHP 4 значением по умолчанию для error_reporting будет E_ALL & ~E_NOTICE, что означает отображение всех ошибок и предупреждений, которые не имеют уровень E_NOTICE-level. В PHP 3 значение по умолчанию (E_ERROR | E_WARNING | E_PARSE) означает то же самое. Заметьте, однако, что, поскольку константы не поддерживаются в PHP 3 в файле php3.ini, установка error_reporting должна выполняться цифрами; то есть 7 по умолчанию.
Начальное значение может быть изменено в ini-файле директивой error_reporting, в вашем Apache httpd.conf-файле директивой php_error_reporting (php3_error_reporting для PHP 3) и, наконец, оно может быть установлено на этапе прогона скрипта функцией error_reporting().
Предупреждение! |
---|
При обновлении кода или серверов с PHP 3 до PHP 4 вы должны проверить эти установки и вызовы error_reporting(), либо можете отключить вывод сообщений о новых типах ошибок, особенно о E_COMPILE_ERROR. Это может привести к появлению пустых документов без какого-либо сообщения о причине и месте возникновения проблемы. |
Все выражения РНР могут также вызываться с префиксом "@", который отключает сообщения об ошибках для данного конкретного выражения. Если ошибка возникает в ходе вычисления такого выражения и track_errors включена, вы можете найти сообщение об ошибке в глобальной переменной $php_errormsg.
Примечание: префикс @ error-control-операции не отключает вывод сообщений, которые являются результатом ошибок разбора.
Предупреждение! |
---|
В настоящее время префикс @ error-control-операции отключает даже сообщения о критических ошибках, которые прерывают выполнение скрипта. Помимо прочего, это означает, что, если вы используете @ для подавления ошибок из определённой функции и она недоступна или неправильно написана, скрипт накроется без указания причины. |
Ниже дан пример использования возможностей РНР по обработке ошибок. Мы определяем функцию обработки ошибок, которая записывает лог-информацию в файл (используя XML-формат) и уведомляет разработчика по e-mail при возникновении критической ошибки в логике.
Это лишь простой пример, показывающий, как использовать Функции обработки ошибок и логинга.
См. также error_reporting(), error_log(), set_error_handler(), restore_error_handler(), trigger_error(), user_error()