Применение пользовательского обработчика ошибок

Задача
Необходимо создать пользовательский обработчик ошибок, позволяющий управлять уровнем сообщений PHP об ошибках.

Решение
Для установки собственной функции обработки ошибок применяется функция set_error_handler():
set_error_handler('pc_error_handler');
function pc_error_handler($errno, $error, $file, $line) {
$message = "[ERROR][$errno][$error][$file:$line]";
error_log($message);
}

Обсуждение
Пользовательская функция обработки ошибок может анализировать ошибки на основании их типа и предпринимать соответствующие действия.

Передайте функции set_error_handler() имя функции, и PHP будет направлять все ошибки этой функции. Функция обработки ошибок может принимать до пяти параметров. Первый параметр – это тип ошибки, например 8 для E_NOTICE. Второй параметр – это текст сообщения об ошибке, такой как «Undefined variable: html». Третий и четвертый аргументы содержат имя файла и номер строки, в которой PHP обнаружил ошибку. Последний параметр представляет массив, содержащий все переменные, определенные в текущей области видимости, и их значения.

Например, в следующем фрагменте кода к переменной $html прибавляется значение без предварительного присваивания начального значения:

error_reporting(E_ALL);
set_error_handler('pc_error_handler');
function pc_error_handler($errno, $error, $file, $line, $context) {
$message = "[ERROR][$errno][$error][$file:$line]";
print "$message";
print_r($context);
}
$form = array('one','two');
foreach ($form as $line) {
$html .= "$line";
}

Когда генерируется ошибка «Undefined variable», то функция pc_error_handler() печатает:
[ERROR][8][Undefined variable: html][err-all.php:16]

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

Еще раз подчеркнем, что ошибки, отмеченные в табл.


8.2 как уловимые, можно обработать функцией, зарегистрированной с помощью функции set_error_handler(). С остальными связаны настолько серьезным проблемы, что пользователю лучше передоверить их обработку PHP.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Аутентификация, основанная на cookies
Буферизация вывода в броузер
Взаимодействие в рамках Apache
Идентификация различных броузеров
Настройка обработки ошибок

Вернуться в раздел: PHP / 8. Основы Web