Описание функции set-error-handler
set_error_handler
(PHP 4 >= 4.0.1)
set_error_handler - устанавливает пользовательский обработчик ошибок.
Описание
string set_error_handler (string error_handler)
Устанавливает пользовательскую функцию (error_handler) для обработки ошибок в скрипте. Возвращает ранее определённый обработчик ошибок (если имеется), FALSE при ошибке. Эта функция может использоваться для определения вашего собственного способа обработки ошибок на этапе прогона, например, в приложениях, в которых вам нужно зачистить данные/файлы при возникновении критических ошибок, или если вам нужно переключить ошибку при определённых условиях (использую trigger_error()).
Пользовательская функция должна принимать 2 параметра: error-код и строку с описанием ошибки. Начиная с PHP 4.0.2, предоставляются дополнительные 3 параметра: имя файла, в котором появилась ошибка, номер строчки, в которой появилась ошибка, и контекст, в котором появилась ошибка (массив, указывающий на активную таблицу символов в точке возникновения ошибки).
Примечание: следующие типы ошибок не могут быть обработаны пользовательской функцией: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR и E_COMPILE_WARNING.
Следующий пример показывает обработку внутренних исключений путём переключения ошибок и обработки их пользовательской функцией:
Пример 1. Обработка ошибок с помощью set_error_handler() и trigger_error()
|
А когда вы запустите это скрипт-сэмпл:
vector a
Array
(
[0] => 2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
----
vector b - a warning (b = log(PI) * a)
<b>WARNING</b> [1024] Value at position 2 is not a number, using 0 (zero)<br>
Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)
----
vector c - an error
<b>ERROR</b> [512] Incorrect input vector, array of values expected<br>
NULL
----
vector d - fatal error
<b>FATAL</b> [256] log(x) for x <= 0 is undefined, you used: scale = -2.5<br>
Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)<br>
Aborting...<br> |
Важно помнить, что стандартный обработчик ошибок РНР полностью игнорируется. Установки error_reporting() не будут иметь эффекта, и ваш обработчик будет вызываться независимо - однако вы можете читать текущее значение из error_reporting и поступать соответственно. Особенно важно то, что это значение будет 0, если оператор, вызвавший ошибку, имел префикс @.
Отметьте также, что вы отвечаете за die(), если это необходимо. Если возвращает функция обработки ошибок, выполнение скрипта будет продолжено со следующего оператора после оператора, вызвавшего ошибку.
См. также error_reporting(), restore_error_handler(), trigger_error(), user_error().
