Настройка обработки ошибок

Задача
Необходимо изменить уровень регистрации ошибок на определенной странице. Это позволяет управлять типом отображаемых ошибок.

Решение
Типы ошибок, на которые будет реагировать PHP, настраиваются с помощью функции error_reporting():

error_reporting(E_ALL); // все
error_reporting(E_ERROR | E_PARSE); // только основные проблемы
error_reporting(E_ALL & ~E_NOTICE); // все, за исключением уведомлений

Обсуждение
Каждая сгенерированная ошибка имеет тип, к которому она относится. Например, если попытаться применить функцию array_pop() к строке, то PHP пожалуется, что «This argument needs to be an array» (Этот аргумент должен быть массивом), поскольку извлекать последний элемент можно только из массивов. С этим сообщением ассоциируется тип ошибки E_NOTICE, а не фатальная ошибка времени выполнения (runtime error).

По умолчанию уровень сообщений об ошибках равен E_ALL & ~E_NOTICE, что означает все типы ошибок, за исключением уведомлений. Символ & – это логическое И, а символ ~ – логическое НЕТ. Однако рекомендованный файл конфигурации php.ini устанавливает уровень сообщения об ошибках, равный E_ALL, что означает все типы ошибок.


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

Один из примеров ошибки типа E_NOTICE – «Undefined variable»; она случается при попытке использовать переменную без предварительно присвоенного значения:

// Генерирует E_NOTICE
foreach ($array as $value) {
$html .= $value;
}
// Не генерирует никакого сообщения об ошибках
$html = '';
foreach ($array as $value) {
$html .= $value;
}

В первом случае при начальном проходе цикла foreach переменная $html не определена. Поэтому когда ее содержимое складывается со значением, PHP сообщает о попытке сложения с неопределенной переменной. Во втором случае пустая строка присваивается переменной $html вне цикла, для того чтобы избежать сообщения E_NOTICE. Предыдущие
два программные фрагмента порождают один и тот же код, поскольку по умолчанию значение переменной представляет собой пустую строку. Сообщение E_NOTICE может быть полезным, поскольку можно сделать, например, ошибку в имени переменной:

foreach ($array as $value) {
$hmtl .= $value; // Ой! Это должна быть $html
}
$html = ''
foreach ($array as $value) {
$hmtl .= $value; // Ой! Это должна быть $html
}

Пользовательская функция обработки ошибок может анализировать ошибки на основании их типа и предпринимать соответствующие действия.

Ошибки, отмеченные как уловимые, могут быть обработаны функцией, зарегистрированной с помощью функции set_error_handler().


Остальные соответствуют настолько серьезным проблемам, что пользователю их обрабатывать небезопасно, поэтому о них должен позаботиться PHP.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Аутентификация, основанная на cookies
Буферизация вывода в броузер
Взаимодействие в рамках Apache
Идентификация различных броузеров
Отслеживание сеанса работы с сайтом

Вернуться в раздел: PHP / 8. Основы Web