![]() |
|
||||||||||||||
|
|
|
<?php
// функцию лучше всего вызывать
// в самом начале, до выполнения
// других выражений
error_reporing(E_ALL ^ E_NOTICE);
// код скрипта
?>
Параметр функции может быть комбинацией следующих констант
Например:
<?php
// отображать всё
error_reporting(E_ALL);
// отображать всё, кроме замечаний
error_reporting(E_ALL ^ E_NOTICE);
// отображать только замечания и предупреждения
error_reporting(E_NOTICE | E_WARNING);
// не отображать ничего
error_reporting(0);
?>
Иногда возникают случаи, когда надо запретить вывод ошибок не для всего скрипта, а лишь для его части. В этом случае необходимо пользоваться оператором подавления ошибок "@" (собака). Будучи поставлен перед выражением, этот оператор запрещает вывод на зкран всех сообщений, предупреждений или замечаний, генерируемых выражением. Например:
<?php
$mailed = @mail('', '', '');
// если письмо не будет отправлено
// но функция просто вернёт false,
// не отображая никаких ошибок
if(!$mailed)
trigger_error('Ошибка отправки письма');
?>
Пользовательские ошибки могут быть без проблем перехвачены и обработаны, причем обработка ошибок построена таким образом, что может выполняться без завершения основного скрипта. Для генерации ошибки служит функция trigger_error(), которой передаётся два параметра - тип ошибки и собственно её текст. Тип ошибки определяется стандартными константами, рассмотренными выше. Например:
<?php
if(!isset($user_name) || trim($user_name) == '')
trigger_error(E_USER_ERROR,
'Имя пользователя не указано');
if(!isset($user_passwd) || trim($user_passwd) == '')
trigger_error(E_USER_ERROR,
'Пароль пользователя не указан');
?>
Вызов функции trigger_error не приводит к аварийному завершению скрипта, а значит весь последующий код будет нормально исполняться. Если же прервать выполнение всё-таки необходимо, то программист должен сделать это "вручную", используя средства языка. Как и для исключений, для ошибок можно установить собственный обработчик. Делается это при помощи функции set_error_handler(), которой передаётся имя функции-обработчика и список типов ошибок, для которых эта функция вызывается. Функция имеет четыре параметра: номер ошибки, текст ошибки, имя файла и номер строки, где ошибка произошла. Например:
<?php
function specialHandler($errno, $errstr,
$errfile, $errline)
{
switch ($errno)
{
case E_USER_ERROR:
echo "Критическая ошибка: <br />\n" .
"Номер: $errno <br />\n" .
"Текст: $errstr <br />\n" .
"Файл: $errfie <br />\n" .
"Строка: $errline <br />\n";
exit(1);
break;
case E_USER_WARNING:
echo "Предупреждение: [$errno] $errstr<br />\n";
break;
case E_USER_NOTICE:
echo "Замечание: [$errno] $errstr<br />\n";
break;
default:
echo "Неизвестная ошибка: [$errno] $errstr<br />\n";
break;
}
return true;
}
// указываем, что нам необходимо
// проверять все возникающие ошибки
set_error_handler('specialHandler', E_ALL);
?>
Если функция обработки ошибки возвращает true, то внутренний обработчик PHP не вызывается, а если false - то после выхода из пользовательской процедуры ошибка будут передана в стандартный внутренний обработчик. Это позволяет программисту реагировать только на часть возникающих ошибок, отдавая остальное старндартным обработчикам PHP. Восстановить предыдущий обработчик можно, вызвав функцию restore_error_handler():
<?php
set_error_handler('myFunction');
//
// код
//
restore_error_handler();
?>
Таким способом можно включать и выключать обработчики ошибок по мере необходимости. Но злоупотреблять такими операциями не стоит - слишком высока вероятность запутаться и перепутать обработчики. В большинстве случаев достаточно одного, но хорошо написанного обработчика, который пишет ошибки в лог-файл или базу данных, пересылает их на email администратора и делает другие полезные операции. Обработка ошибок - один из важнейших элементов написания скриптов. Некачественно написанный срипт может стать не только головной болью веб-мастера или администратора сайта. "Бажный" (от слова "баг" - ошибка) скрипт представляет серьёзную угрозу безопасности. В руках умелого взломщика текст ошибки превращается в отмычку, открывающую доступ ко всему содержимому сайта, а может быть и сервера. |
|
|
Спасибо, что заглянули на сайт. Надеюсь, Вам понравилось. Заходите еще. Здесь всегда рады вам :) |
|
© 2005-2012 |
E-mail: |