PHP Ошибки и ведение журналаФункции
Введение в обработку ошибок и ведение журнала PHP
Функции обработки ошибок и ведения журнала позволяют обрабатывать и записывать ошибки.
Функции обработки ошибок позволяют пользователям определять правила обработки ошибок и изменять способ регистрации ошибок.
Функции ведения журнала позволяют пользователям регистрировать активность приложения и отправлять сообщения журнала по электронной почте, в системные журналы или на другие машины.
Настройка во время выполнения
На функции обработки ошибок влияет файл конфигурации php.ini.
Параметры конфигурации обработки ошибок и ведения журнала:
| Параметр | Значение по умолчанию | Описание | Изменяемый |
|---|---|---|---|
| error_reporting | NULL | Устанавливает уровень отчетности об ошибках PHP и возвращает текущий уровень (числовой или константный). | PHP_INI_ALL |
| display_errors | "1" | Эта опция определяет, отображаются ли сообщения об ошибках как часть вывода на экране или скрываются от пользователя. Примечание:Эту возможность не следует использовать в рабочей среде (используйте её во время разработки и тестирования). |
PHP_INI_ALL |
| display_startup_errors | "0" | Даже если display_errors включён, сообщения об ошибках во время запуска PHP отображаться не будут. Настоятельно рекомендуется устанавливать display_startup_errors в off, кроме случаев отладки. | PHP_INI_ALL |
| log_errors | "0" | Определяет, записывать ли ошибки времени выполнения скрипта в серверный журнал ошибок или в error_log. Обратите внимание, что это конфигурационная опция, зависящая от сервера. | PHP_INI_ALL |
| log_errors_max_len | "1024" | Устанавливает максимальное количество байт для log_errors. Информация об источнике ошибки добавляется в error_log. По умолчанию — 1024. Если установлено 0, это означает неограниченную длину. Эта настройка длины применяется к регистрируемым ошибкам, отображаемым ошибкам и $php_errormsg. | PHP_INI_ALL |
| ignore_repeated_errors | "0" | Не регистрировать повторяющиеся сообщения. Повторяющиеся ошибки должны возникать в одной и той же строке кода в одном и том же файле, если только ignore_repeated_source не установлен в true. | PHP_INI_ALL |
| ignore_repeated_source | "0" | При игнорировании повторяющихся сообщений также игнорируется источник сообщения. Если этот параметр включён, повторяющиеся сообщения не будут записывать, были ли они сгенерированы разными файлами или разными строками исходного кода. | PHP_INI_ALL |
| report_memleaks | "1" | Если этот параметр установлен в Off, информация об утечках памяти не будет отображаться (в stdout или в журнале). | PHP_INI_ALL |
| track_errors | "0" | Если включено, последняя ошибка всегда будет присутствовать в переменной $php_errormsg. | PHP_INI_ALL |
| html_errors | "1" | Отключить HTML-теги в сообщениях об ошибках. | PHP_INI_ALL PHP_INI_SYSTEM в PHP <= 4.2.3. |
| xmlrpc_errors | "0" | Отключает обычный вывод ошибок и форматирует ошибки как сообщения об ошибках XML-RPC. | PHP_INI_SYSTEM |
| xmlrpc_error_number | "0" | Используется в качестве значения элемента faultCode XML-RPC. | PHP_INI_ALL |
| docref_root | "" | Новый формат сообщения об ошибке включает соответствующую справочную страницу, которая специально описывает ошибку или описывает функцию, вызвавшую ошибку. Чтобы предоставить страницы руководства, вы можете скачать руководство на соответствующем языке с официального сайта PHP и установить URL в ini на соответствующий локальный адрес. Если к вашей локальной копии руководства можно получить доступ через "/manual/", вы можете просто установить docref_root=/manual/. Вам также нужно установить docref_ext в соответствии с суффиксом ваших локальных файлов, docref_ext=.html. Конечно, вы также можете задать внешний адрес ссылки. Например, вы можете установить docref_root=http://manual/en/ или docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F" |
PHP_INI_ALL |
| docref_ext | "" | См. docref_root. | PHP_INI_ALL |
| error_prepend_string | NULL | Содержимое для вывода перед сообщением об ошибке. | PHP_INI_ALL |
| error_append_string | NULL | Содержимое для вывода после сообщения об ошибке. | PHP_INI_ALL |
| error_log | NULL | Задаёт файл, в который будут записываться ошибки скрипта. Этот файл должен быть доступен для записи пользователю веб-сервера. | PHP_INI_ALL |
Установка
Функции обработки ошибок и ведения журнала являются частью ядра PHP. Для использования этих функций установка не требуется.
Функции обработки ошибок и логирования PHP
PHP: Указывает самую раннюю версию PHP, поддерживающую эту функцию.
| Функция | Описание | PHP |
|---|---|---|
| debug_backtrace() | Создаёт обратную трассировку. | 4 |
| debug_print_backtrace() | Выводит обратную трассировку. | 5 |
| error_get_last() | Получает последнюю возникшую ошибку. | 5 |
| error_log() | Отправляет ошибку в журнал ошибок сервера, в файл или на удалённый адресат. | 4 |
| error_reporting() | Указывает, какие ошибки выводятся. | 4 |
| restore_error_handler() | Восстанавливает предыдущий обработчик ошибок. | 4 |
| restore_exception_handler() | Восстанавливает предыдущий обработчик исключений. | 5 |
| set_error_handler() | Устанавливает пользовательскую функцию обработки ошибок. | 4 |
| set_exception_handler() | Устанавливает пользовательскую функцию обработки исключений. | 5 |
| trigger_error() | Создаёт пользовательское сообщение об ошибке. | 4 |
| user_error() | Псевдоним trigger_error(). | 4 |
Константы ошибок и логирования PHP
PHP: Указывает самую раннюю версию PHP, поддерживающую эту константу.
| Значение | Константа | Описание | PHP |
|---|---|---|---|
| 1 | E_ERROR | Фатальная ошибка во время выполнения. Ошибка, которую нельзя исправить. Останавливает выполнение скрипта. | |
| 2 | E_WARNING | Нефатальная ошибка во время выполнения. Не останавливает выполнение скрипта. | |
| 4 | E_PARSE | Ошибка синтаксического анализа во время компиляции. Ошибки синтаксического анализа должны генерироваться только парсером. | |
| 8 | E_NOTICE | Уведомление во время выполнения. Скрипт обнаруживает что-то, что может быть ошибкой, но это также может происходить при нормальной работе скрипта. | |
| 16 | E_CORE_ERROR | Фатальная ошибка при запуске PHP. Это похоже на E_ERROR из ядра PHP. | 4 |
| 32 | E_CORE_WARNING | Нефатальная ошибка при запуске PHP. Это похоже на E_WARNING из ядра PHP. | 4 |
| 64 | E_COMPILE_ERROR | Фатальная ошибка во время компиляции. Это похоже на E_ERROR, сгенерированную движком Zend Script Engine. | 4 |
| 128 | E_COMPILE_WARNING | Нефатальная ошибка во время компиляции. Это похоже на E_WARNING, сгенерированную движком Zend Script Engine. | 4 |
| 256 | E_USER_ERROR | Фатальная ошибка, сгенерированная пользователем. Это похоже на E_ERROR, сгенерированную программистом с помощью функции PHP trigger_error(). | 4 |
| 512 | E_USER_WARNING | Нефатальная ошибка, сгенерированная пользователем. Это похоже на E_WARNING, сгенерированную программистом с помощью функции PHP trigger_error(). | 4 |
| 1024 | E_USER_NOTICE | Уведомление, сгенерированное пользователем. Это похоже на E_NOTICE, сгенерированное программистом с помощью функции PHP trigger_error(). | 4 |
| 2048 | E_STRICT | Уведомление во время выполнения. PHP рекомендует изменить ваш код для улучшения взаимодействия и совместимости. | 5 |
| 4096 | E_RECOVERABLE_ERROR | Перехватываемая фатальная ошибка. Это похоже на E_ERROR, которая может быть перехвачена пользовательским обработчиком (см. set_error_handler()). | 5 |
| 6143 | E_ALL | Все уровни ошибок и предупреждений, кроме E_STRICT (начиная с PHP 6.0, E_STRICT будет частью E_ALL). | 5 |