Изменение стандартного обработчика ошибок

May 4, 2010 by admin Комментировать »

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

mixed set_error_handler ( callback: error_handler [, int error_types] )

В качестве параметра error_handler передается наименование функции, кото­рая обрабатывает ошибку и выполняет связанное с ней действие. В необязательном параметре error_types можно определить те виды ошибок, для которых этот об­работчик действителен.

Вариантов использования данной возможности много. Например, если случает­ся какая-либо ошибка, РНР может не просто записать ее в лог, но и удалить неко­торые файлы или внести запись в БД. Таким образом может вестись и собственный лог ошибок, ориентированный на конкретное приложение.

Для того чтобы РНР смог определить, что произошла ошибка, необходимо ис­пользовать функцию trigger_error (), которая и сообщит интерпретатору, что программист посчитал то или иное действие ошибочным. Функция записывается следующим образом.

bool trigger_error ( string error_msg [, int error_type] )

в параметр error_msg передается текст ошибки, а в параметре error_type указывается ее тип. Например, следующий код в обычных условиях не вызовет ни­какой ошибки.

<?php

$а = TRUE;

if (Sa) {

echo "ПриветI"; ) else {

echo "Пока!";

}

?>

Ho здесь нет никакой ошибки с точки зрения РНР. Рассмотрим пример кода, который вызовет ошибку в том случае, если $а = TRUE (т.е. в нашем примере эта ошибка гарантирована).

<?php

//нужно, чтобы выводились только ошибки, //имеющие тип E_USER_ERROR error_reporting(E_USER_ERROR);

// включаем собственный обработчик

$error_handler = set_error_handler("myErrorHandler",E_ALL); $a = TRUE; if ($a) {

trigger_error("Значение \$a равно TRUE. Ожидалось FALSE", E_USER_ERROR); ) else {

echo "Пока1";

)

// функция-обработчик

function myErrorHandler($ermo, $errstr, $errfile, $errline) {

if ($errno == E_USER_ERROR) { echo "<Ь>Ошибка</Ь> [$errno] $errstr<br />\n"; echo " Ошибочка вышла в строке $errline файла $errfile", echo ", версия PHP: " . PHP_VERSION . ", ОС: " . PHP_OS . "<br />\n"; } else {

echo "<Ь>Неиввестный тип ошибки</Ь>: [$errno] $errstr<br />\п"; break;

}

}

?>

Если запустить этот код на выполнение, то на экране появится похожая фраза.

Ошибка [256] Значение Sa равно TRUE. Ожидалось FALSE Ошибочка вышла в строке 11 файла f:\site\Apache\htdocs\ view.php, версия РНР: 5.0.4, ОС: WINNT

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

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты