Необходимо изменить уровень регистрации ошибок на определенной странице. Это позволяет управлять типом отображаемых ошибок.
Типы ошибок, на которые будет реагировать 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
}
Пользовательская функция обработки ошибок может анализировать ошибки на основании их типа и предпринимать соответствующие действия. Полный список типов ошибок показан в таблице: Типы ошибок
Таблица:Типы ошибок
Значение | Константа | Описание | Уловимая |
---|---|---|---|
1 | E_ERROR | Неисправимая ошибка | Нет |
2 | E_WARNING | Исправимая ошибка | Да |
4 | E_PARSE | Синтаксическая ошибка | Нет |
8 | E_NOTICE | Вероятная ошибка | Да |
16; | E_CORE_ERROR | Подобная E_ERROR, но сгенерированная ядром PHP | Нет |
32 | E_CORE_ WARNING | &Подобная E_WARNING, но сгенерированная ядром PHP | Нет |
64 | E_COMPILE_ ERROR | Подобная E_ERROR, но сгенерированная Zend Engine | Нет |
128 | E_COMPILE_ WARNING | Подобная E_WARNING, но сгенерированная Zend Engine | Нет |
256 | E_USER_ERROR | Подобная E_ERROR, но инициированная вызовом функции trigger_error() | Да |
512 | E_USER_ WARNING | Подобная E_WARNING, но инициированная вызовом функции trigger_error() | Да |
1024 | E_USER_NOTICE | Подобная E_NOTICE, но инициированная вызовом функции trigger_error() | Да |
2047 | E_ALL | Все | n/a |
Ошибки, отмеченные как уловимые, могут быть обработаны функцией, зарегистрированной с помощью функции set_error_handler(). Остальные соответствуют настолько серьезным проблемам, что пользователю их обрабатывать небезопасно, поэтому о них должен позаботиться PHP.
Документацию по функции error_reporting() на http://www.php.net/error-reporting и по функции set_error_handler() на http://www.php.net/set-error-handler; более подробную информацию об ошибках на http://www.php.net/ref.errorfunc.php.