Учебник по основам PHP. PHPBeginner



         

Отслеживание и обработка ошибок


РНР имеет следующие типы ошибок и предупреждений:

Значение

Константа

Описание

1

E_ERROR

Фатальная ошибка времени исполнения

2

E_WARNING

Предупреждение времени исполнения

4

E_PARSE

Сообщение интерпретации времени исполнения

8

E_NOTICE

Простое сообщение времени исполнения

16

E_CORE_ERROR

Фатальная ошибка при инициализации РНР

32

E_CORE_WARNING

Предупреждение инициализации

64

E_COMPILE_ERROR

Фатальная ошибка компиляции

128 E_COMPILE_ WARNING Предупреждения компиляции
256 E_USER_ERROR Ошибки, определяемые пользователем
512 E_USER_WARNING Предупреждения, определяемые пользователем
1024 E_USER_NOT1CE Сообщения, определяемые пользователем
2047 E_ALL Все перечисленные сообщения

Указанные значения в виде чисел или консгант можно комбинировать, формируя битовую маску ошибок, о которых необходимо сообщать в ходе исполнения сценария. Для комбинирования используются битовые операторы, но в конфигурационном файле php.ini ' распознаются только «|», «-», «!» и <<&>>.

В PHP 4 по умолчанию разрешены сообщения вида E_ALL & -EJJOTICE, то ость сообщаться должно все, кроме обычных сообщений. Можно переопределить эту установку параметром файла конфигурации еггог_ reporting (ее также можно указывать в файлах конфигурации сервера Apache); а во время исполнения — функцией error_reporting().

Если при вызове функции перед ее именем указать символ «@», то в случае возникновения ошибки в этой функции сообщение о нем выдаваться не будет.

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

Если разрешен параметр конфигурации track_errors, то сообщение об ошибке сохраняется в глобальной переменной $php_errormsg.

«?php // определенный
пользователем обработчик ошибок
function userErrorHandler (Serrno. Serrmsg.
Sfilenamp Slirenum. Svarb) { $dt = date
("Y-m-d H i:s (Т)"). // время возникновения
ошибки Serrortype = array
( 1 => "Error". 2 => "Warning".
4 => "Parsing Error". 8 => "Notice".
16 => "Core Error". 32 =>
"Core Warning". 64 => "Compile Error".
128 => "Compile Warning". 256 =>
"User Error". 512 => "User Warning".
1024=> "User Notice" );
$err .= "время ($dt). номер ошибки
($errno). ": $err .= "тип ошибки
C'.$errortype[$errno]."): ":
$err = "\"$errmsg\", файл
\"$filename\". строка (".
$err .= $linenum.")\n";
I $user_errors - array
(E_USER_ERROR. E_USER_WARNING.
E_USER_NOTICE): if (in_array($errno.
$user_errors))
echo $err;
// выдать сообщения для ошибок
пользователя // сохранить событие
ошибки в системном журнале
error_log($err. 3.
"/usr/local/php4/error.log"): }
// установить уровень контроля
ошибок и обработчик error_reporting(0)
: // не выводить сообщения РНР
$old_error_handler = set_error_handler
("userErrorHandler");
// неопределенная константа вызывает
предупреждение
$t = _NOT_DEFINED_CONSTANT.
tngger_error("Mos ошибка". E_USER_ERROR);
tngger_error
("Moe предупреждение".
E_USER_WARNING): ?>




Содержание  Назад  Вперед