#10. 3 php Генерация пользовательских ошибок. Функции trigger_error() и errror_log()

Вывод сообщения об ошибке в окно браузера (trigger_error())

Сгенерировать ошибку и вывести сообщение о ней в окно браузера можно с помощью функции

bool trigger_error(string $error_msg, int $error_type = E_USER_NOTICE)

Первым аргументом является текст сообщения об ошибке, а вторым — её тип. Данная функция позволяет сгенерировать ошибки только пользовательских типов:

  • E_USER_ERROR— фатальная ошибка, вызывает прерывание скрипта;
  • E_USER_WARNING — предупреждение;
  • E_USER_NOTICE — уведомление о чем-то, что может привести к ошибке;
  • E_USER_DEPRECATED — уведомление об использовании устаревших конструкций.

Функция возвращает true всегда, когда передано корректное значение $error_type, в противном случае возвращает false (ошибка не генерируется).

Пример 1.

<?php

function print_age(int $age)
{
    if ($age < 0) {
        trigger_error("Возраст не может быть отрицательныем числом.", 
            E_USER_ERROR);
    }
    
    echo "Вам $age лет";
}

print_age(-17);

Поскольку генерируется фатальная ошибка, то программа прервется, и инструкция

echo "Вам $age лет";

не будет выполнена. Текст сообщения об ошибке будет выведен в окно браузера в том случае, если в системе отслеживаются ошибки данного типа (типы отслеживаемых ошибок определяются значением директивы error_reporting конфигурационного файла php.ini):

 Fatal error: Возраст не может быть отрицательныем числом. in /var/www/mysite/index.php on line 6

Запись сообщения в файл/отправка по почте (error_log())

Функция

int error_log(string $msg, int $type=0  [,string $destination] 
    [, string $extra_headers])

также генерирует сообщение об ошибке, текст которого передается в параметр $msg. Её дальнейшее поведение зависит от значения второго параметра:

  1. $type == 0 (используется по умолчанию) — сообщение записывается в лог-файл, заданный директивой error_log.
  2. $type == 1 — сообщение отправляется по почте на адресс, указанный в параметре $destination. Параметр $extra_headers задает дополнительные почтовые заголовки.
  3. $type == 3 — сообщение добавляется в конец файла $destination.

В результате выполнения следующего примера будет создан файл errors.txt, в который будет записано сообщение об ошибке. Если такой файл существует, сообщение будет дописано в конец файла. Программа при этом не прерывается.

Пример 2.

<?php

function print_age(int $age)
{
    if ($age < 0) {
        error_log("Возраст не может быть отрицательныем числом.", 
            1, "errors.txt");
    }
    
    echo "Вам $age лет";
}

print_age(-17);