Обработчик ошибок
Как бы хорошо не писалось и не отлаживалось достаточно большое приложение,
все равно оно будет содержать ошибки. Это вдвойне верно для программного
обеспечения, разрабатываемого для сайтов. Дело в том, что программное
обеспечение для сайтов часто находится в состоянии постоянного
переписывания. В связи с этим возникает потребность создавать изощренные
методики обработки ошибок.
Для этих целей PHP предоставляет возможность задать
пользовательскую функцию, которая будет производить
обработку возникающих ошибок. Эта функция принимает два параметра: код ошибки
и ее текстовое описание, а начиная с версии PHP 4.0.2, этой функции передаются еще
три необязательных параметра: полное имя файла, в
котором произошла ошибка, номер строки и контекст (массив, содержащий таблицу символьных
имен в точке, где произошла ошибка). Ниже приведен листинг примитивной функции-обработчика
ошибок и участок кода, устанавливающий данный обработчик.
function my_handler($errno, $errstr, $errfile, $errline, $vars)
{
echo "Ошибка $errno: $errstrв ";
echo "в $errline строке файла $errfile<br>";
}
set_error_handler("my_handler");
Таким образом, обработчик ошибок может использовать все возможности
PHP для анализа ошибок, их протоколирования, извещения
администратора и тому подобного.
Осталось сделать несколько замечаний. Функция обработчика ошибок вызывается
для всех ошибок вне зависимости от установок error_reporting.
Однако функция-обработчик может получить
информацию о текущих типах обрабатываемых ошибок с
помощью функции error_reporting(). Если выражение,
вызвавшее ошибку предваряется оператором подавления вывода
шибок "@", то функция error_reporting() в
обработчике ошибок вернет 0. Это необходимо учитывать при написании обработчика
ошибок, который будет работать совместно с оператором подавления ошибок.
Обработчик ошибок так же ответственен за прекращение работы српипта (обычно
при помощи функции die()) в случае фатальных ошибок.
Необходимо учитывать, что при возврате из
пользовательского обработчика ошибок, скрипт продолжит выполнение со следующего
оператора даже при фатальных ошибках.
Источник: www.webber.ru
|