Обработка Ошибок
Глава 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()
