Обработка ошибок

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

  • error_reporting
  • display_errors
  • log_errors

Так же в скриптах монжо выполнить следующие инструкции:

error_reporting = E_ALL & ~E_NOTICE // in php.ini
error_reporting( E_ALL ^ E_NOTICE ); 
ini_set(‘error_reporting’,E_ALL ^ E_NOTICE); // in php script
error_reporting( 0 ); // turn OFF error reporting, in php script

Рекомендуемая настройка на продакшене:

E_ALL && ~ E_DEPRECATED && ~ E_STRICT

Установка обработчика ошибок

В скрипте может быть объявлена catch-all функция, которая будет вызвана PHP, когда создастся условие для ошибки, с помощью функции set_error_handler().

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

Ошибки следующих типов не могут быть обработаны пользователем:

  • E_ERROR
  • E_PARSE
  • E_CORE_ERROR
  • E_CORE_WARNING
  • E_COMPILE_ERROR
  • E_COMPILE_WARNING,
  • большинство E_STRICT ошибок, произошедших в файле, где вызвана функция set_error_handler().

Важно помнить, что стандартный обработчик ошибок PHP не будет обрабатывать никакие типы ошибок, определенные в error_types, пока callback-функция не вернет FALSE. Пользовательский обработчик будет вызываться при любой ошибке, независимо от настроек, заданных функцией error_reporting().

Также важно помнить, что на совести обработчика лежит вызов функции die() в случае необходимости. Если происходит возврат их обработчика ошибок, управление передается следующему выражению, стоящему за тем, что вызвало ошибку.

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

$oldErrorHandler = set_error_handler ($myErrorHandler);

callable set_exception_handler ( callable $exception_handler )

  • Задает обработчик по умолчанию для случаев, когда исключение выброшено вне блока try/catch. После вызова exception_handler выполнение будет остановлено.
  • Возвращает имя предыдущего заданного обработчика или NULL в случае ошибки. Если предыдущих обработчиков определено не было, то также возвращается NULL.

debug_backtrace()

  • Выводит стек вызовов функций в массив.

debug_print_backtrace()

  • Выводит стек вызовов функций.

trigger_error($error_msg [,$error_type])

  • Используется для вызова пользовательских ошибок, можно использовать в связке с встроенным обработчиком ошибок, а также с пользовательским обработчиком, заданным функцией set_error_handler().
  • Эта функция может быть полезной, если требуется сгенерировать определенную реакцию на исключение во время выполнения.
  • user_error() - синоним для trigger_error().