set_error_handler

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

set_error_handler Задаёт пользовательский обработчик ошибок

Описание

set_error_handler(?callable$callback, int$error_levels = E_ALL): ?callable

Задаёт пользовательскую функцию (callback), как обработчик ошибок в скрипте.

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

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

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

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

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

Список параметров

callback

Если передано значение null, обработчик сбрасывается в состояние по умолчанию. В противном случае обработчик представляет собой callback-функцию со следующей сигнатурой:

handler(
    int$errno,
    string$errstr,
    string$errfile = ?,
    int$errline = ?,
    array$errcontext = ?
): bool
errno
В первый аргумент errno будет передан уровень ошибки в виде целого числа.
errstr
Во второй аргумент errstr будет передано сообщение об ошибке в виде строки.
errfile
Если функция обратного вызова принимает третий параметр errfile, то в него будет передано имя файла, в котором произошла ошибка, в виде строки.
errline
Если функция обратного вызова принимает четвёртый параметр errline, то в него будет передан номер строки, в которой произошла ошибка, в виде целого числа.
errcontext
Если функция обратного вызова принимает пятый параметр errcontext, то в него будет передан массив указателей на активную таблицу символов в точке, где произошла ошибка. Другими словами, errcontext будет содержать массив всех переменных, существующих в области видимости, где произошла ошибка. Пользовательские обработчики ошибок не должны изменять этот контекст.
Внимание

Этот параметр объявлен УСТАРЕВШИМ начиная с PHP 7.2.0 и был УДАЛЁН в PHP 8.0.0. Если в вашей функции этот параметр используется и для него не задано значение по умолчанию, то при вызове функции обработчика будет выдана ошибка "too few arguments".

Если функция возвращает false, управление передаётся встроенному обработчику ошибок.

error_levels

Может использоваться для задания маски, в соответствии с которой будет вызываться callback, по аналогии с ini-настройкой error_reporting, которая отвечает за то, какие ошибки будут показаны в отчёте. Без этой маски callback будет вызываться для обработки всех происходящих ошибок, вне зависимости от настроек в error_reporting.

Возвращаемые значения

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

Список изменений

ВерсияОписание
8.0.0 Параметр errcontext был удалён и больше не передаётся в пользовательскую функцию обработки ошибок.
7.2.0 Параметр errcontext объявлен устаревшим. Теперь при его использовании будет вызываться ошибка уровня E_DEPRECATED.

Примеры

Пример #1 Обработка ошибок с помощью функций set_error_handler() и trigger_error()

Пример ниже демонстрирует обработку внутренних исключений путём вызова ошибок разных типов и их обработки пользовательской функцией:

<?php
// функция обработки ошибок
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
if (!(
error_reporting() & $errno)) {
// Этот код ошибки не включён в error_reporting,

Вывод приведённого примера будет похож на:

vector a Array ( [0] => 2 [1] => 3 [2] => foo [3] => 5.5 [4] => 43.3 [5] => 21.11 ) ---- vector b - a notice (b = log(PI) * a) <b>Пользовательское УВЕДОМЛЕНИЕ</b> [1024] Значение на позиции 2 не является числом, будет использован 0 (ноль)<br /> Array ( [0] => 2.2894597716988 [1] => 3.4341896575482 [2] => 0 [3] => 6.2960143721717 [4] => 49.566804057279 [5] => 24.165247890281 ) ---- vector c - a warning <b>Пользовательское ПРЕДУПРЕЖДЕНИЕ</b> [512] Некорректный входной вектор, пропущен массив значений<br /> NULL ---- vector d - fatal error <b>Пользовательская ОШИБКА</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br /> Фатальная ошибка в строке 35 файла trigger_error.php, PHP 5.2.1 (FreeBSD)<br /> Завершение работы...<br />

Смотрите также

To Top