#10. 1 php Типы ошибок. Параметры контроля и протоколирования ошибок (error_reporting, display_errors, log_errors, error_log)

Классификация ошибок

По степени "серьезности":

  • фатальные, то есть такие, автоматическое восстановление после которых невозможно. Сюда относится, например, обращение к несуществующему файлу. Если работа программы должна быть продолжена, то ситуация возникновения такой ошибки должна быть обработана программистом, то есть должен быть написан код восстановления, явно указывающий, что делать дальше в таком случае. Для перехвата фатальных ошибок, начиная с PHP7, используется механизм исключений (exceptions), описанный далее в этой главе.
  • нефатальные — ошибки, восстановление после которых не требуется (выполнение скрипта не прерывается). Сюда относятся предупреждения (warnings), уведомления (notices), отладочные сообщения (debug notices).

По тому, где и в какой момент возникают:

  • ошибки времени выполнения: возникают после запуска скрипта во время выполнения программы;
  • ошибки, генерируемые ядром PHP;
  • ошибки, возникающие на этапе компиляции — генерируются движком Zend;
  • пользовательские ошибки — генерируются программистом с помощью функции trigger_error().

По адресату сообщения об ошибке:

  • пользовательские — сообщение адресуется конечному пользователю и выводится непосредственно в браузер. Например, сюда относится сообщение о том, что данные для авторизации были введены неверно.
  • внутренние — сообщение об ошибке несет информацию, полезную для отладки приложения и бессмысленную для конечного пользователя. Например, номер строки и имя файла, где ошибка возникла. Такие сообщения принято записывать в лог-файл (журнал ошибок).

Директивы контроля и протоколирования ошибок. Файл php.ini

В php существуют специальные константы, определяющие какие именно ошибки должны отслеживаться, а также другие параметры протоколирования. Соответствующие директивы могут быть установлены в конфигурационном файле php.ini. Рассмотрим их подробнее:

  1. error_reporting — целочисленная константа. Значением является десятичное представление двоичной битовой маски. Установленные в 1 биты задают типы отслеживаемых в системе ошибок. На практике чаще всего для установки данного параметра используются специальные константы (см. табл.).

    Таблица. Константы, задающие уровень строгости контроля ошибок

    PHP Константа Значение Описание типа ошибки
    E_ERROR 1 фатальная ошибка времи выполнения, вызывает остановку скрипта
    E_WARNING 2 предупреждение во время выполнения программы, не вызывает остановку скрипта
    E_PARSE 4 ошибки трансляции, генерируются парсером исходного кода
    E_NOTICE 8 уведомление, указывающее на что-то, что может привести к ошибке
    E_CORE_ERROR 16 фатальная ошибка, генерируемая ядром PHP
    E_CORE_WARNING 32 предупреждение, генерируемое ядром PHP
    E_COMPILE_ERROR 64 фатальная ошибка, генерируемая движком Zend на этапе компиляции
    E_COMPILE_WARNING 128 предупреждение, генерируемое движком Zend на этапе компиляции
    E_USER_ERROR 256 фатальная ошибка, генерируемая скриптом при помощи функции trigger_error()
    E_USER_WARNING 512 предупреждение, генерируемое скриптом при помощи функции trigger_error()
    E_USER_NOTICE 1024 уведомление, генерируемое скриптом при помощи функции trigger_error()
    E_STRICT 2048 рекомендации PHP по улучшению кода
    E_RECOVERABLE_ERROR 4096 фатальная ошибка с возможностью восстановления (ядро PHP остается в стабильном состоянии и может продолжать работу)
    E_DEPRECATED 8192 уведомление PHP об использовании устаревшего кода
    E_USER_DEPRECATED 16384 уведомление об использовании устаревшего кода, генерируемое при помощи trigger_error()
    E_ALL 32767 Все перечисленные выше флаги, за исключением E_STRICT

    По умолчанию при установке PHP чаще всего задается значение E_ALL & ~E_NOTICE, устанавливающее полный контроль, кроме некритичных уведомлений интерпретатора.

    В текущем скрипте можно установить локальное (только для этого скрипта) значение параметра error_reporting, например:

    <?php
    error_reporting(E_ALL);
    
  2. display_errors. Возможные значения: on(true) или off(false). Включает или отключает вывод сообщений об ошибках в браузер пользователя.
  3. log_errors. Возможные значения: on(true) или off(false). Включает или отключает вывод сообщений об ошибках в лог-файл, установленный директивой error_log.
  4. error_log — строковая константа, задающая абсолютный путь к лог-файлу.

Все перечисленные выше параметры конфигурационного файла могут быть локально установлены для текущего скрипта с помощью функции ini_set(), например:

<?php
ini_set('error_reporting', E_ALL);
ini_set('error_log', "file.txt");
ini_set('log_errors', true);
ini_set('display_errors', true);

Посмотреть настройки текущей конфигурации можно, используя функцию ini_get(), например,

<?php
echo ini_get('error_reporting');
vedro-compota's picture

_____________
матфак вгу и остальная классика =)