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



Отслеживание и обработка ошибок - часть 5


set_error_handler

Установка пользовательского обработчика ошибок

string set_error_handler (string error_handler)

Функция возвращает имя функции, ранее определенной в качестве обработчика ошибок (или FALSE при ошибке), и устанавливает, в качестве нового обработчика, функцию с указанным в аргументе еггог_ handler именем.

Обычно пользовательский обработчик ошибок работает в паре с функцией tngger_error(), генерирующей ошибку; это может быть использовано (подобно аналогичной конструкции работы с исключениями в С) для освобождения выделенных ресурсов (например, удаления созданных файлов), если сценарий не может нормально завершиться.

Функция, устанавливаемая в качестве обработчика ошибок, должна принимать пять параметров (три последних являются дополнительными и могут не обрабатываться):

  • код ошибки;
  • строку, описывающую ошибку;
  • имя сценария, в котором произошла ошибка;
  • номер строки сценария, содержащей ошибку;
  • контекст (массив, содержащий значения переменных, в момент-возникновения ошибки).
  • <?php // определить константы
    пользовательских ошибок define
    (FATAL.E_USER_ERROR);
    define (ERROR.E_USER_WARNING).
    define (WARNING.E_USER_NOTICE).
    // установить, какие ошибки должны
    обрабатываться в сценарии
    errorj-eporting (FATAL | ERROR | WARNING);
    // пользовательский обработчик ошибок
    function myErrorHandler ($errno. Serrstr.
    ierrfile. Serrlme) { switch (Serrno)
    { case FATAL:
    echo "<b>Критическая ошибка</b>
    [Serrno] $errstr<br>\n";
    echo " в строке: Serrline. файла:
    ".Serrhle:
    echo ", PHP ".PHP_VERSION."
    (".PHP_OS.")<br>\n":
    echo "Aborting...<br>\n":
    exit -1:
    break case ERROR:
    echo "<b>Ошибка</b> [Serrno] $errstr
    <br>\n":
    break: case WARNING:
    echo "<b>Предупреждение</b>
    [Serrno] Serrstr<br>\n";
    break:
    default:
    echo "Неизвестный тип ошибки:
    [Serrno] $errstr<br>\n";
    break; } } // функция для проверки
    обработки ошибок (масштабирование
    массива) function scale_by_log
    (Svect. Sscale) { if ( hs_numenc
    (Sscale) || Sscale <= 0 )
    trigger_error("вычислить log(x).
    для x <= 0 нельзя. ". "(x = Sscale)".
    FATAL), if (hs_array(Svect))
    { trigger error("Требуется массив
    ". ERROR); return null: }
    for ($1=0; $i<count(Svect): Si++)
    { if (!is_numenc($vect[$i]))
    thgger_error( "Элемент (SI)
    не число, и его значением".
    " считается О". WARNING);
    $temp[Si] = log(Sscale) *
    $vect[Si]: } return Stemp: }
    // установить пользовательский
    обработчик ошибок
    Sold_error_handler
    = set_error_handler
    ("myErrorHandler");
    Sa = array(2.3."foo".5.5.43.3.21 11);
    pnnt_r(Sa).
    Sb = scale_by_log(Sa. M_PI);
    // здесь выдается предупреждение
    echo "Массив, масштабированный
    на логарифм(Пи): "; pnnt_r($b):
    $с = scale_by_log("not array".2 3);
    // здесь ошибка var_dump($c).
    $d = scale_by_log($a. -25)
    .// здесь критическая ошибка
    echo "Продолжение сценария .": ?>




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