Уроки PHP — Обработка ошибок (возможные типы ошибок)
В сегодняшнем теоретическом уроке мы рассмотрим сложный и важный вопрос в PHP — выявление и осознание ошибок. Поскольку при создании и программировании скриптов и/или веб-приложений существует большая вероятность появления ошибок, не лишним будет знать коды (константы) ошибок и их описание. Эти возможные ошибки будут приведены для вашего удобства в табличном виде. После ознакомления с данным уроком вы будете лучше понимать запись в логах вида:
[ERROR]: [8][E_NOTICE] [Undefined variable: variable][script.php:1]
Подобный синтаксис сообщения об ошибке можно найти в файлах логов. А в браузере сообщения об ошибке будут несколько похожи: будут включать название файла, номер строки и краткое описание ошибки.
Настройка уровня сообщений об ошибках в PHP
Поскольку PHP имеет много уровней ошибок, для их определения нужно использовать функцию error_reporting()
, которая определяет, о каких ошибках вам будет сообщено. Ее можно использовать в конфигурационном файле php.ini
или непосредственно в файле текущего скрипта. Ниже показаны некоторые варианты настройки этой функции:
<?php error_reporting(E_ALL); // включить сообщение обо всех ошибках ini_set("error_reporting", E_ALL); // другой способ включить сообщения обо всех ошибках error_reporting(E_ERROR | E_PARSE); // включить сообщение только о серьезных ошибках error_reporting(E_ALL & ~E_NOTICE); // включить все сообщения, кроме уведомлений error_reporting(0); // отключить сообщение об ошибках ?>
Некоторые пояснения этой записи:
С каждой сгенерированной ошибкой PHP связан определенный тип. Например, тип ошибки E_NOTICE
— это не критическая ошибка времени выполнения или потенциальная ошибка. Чтобы исключить ее показ функцией error_reporting()
, используется логический оператор НЕ знаком ~ (тильда) (например ~E_NOTICE). То есть запись по умолчанию E_ALL & ~E_NOTICE
означает: все ошибки и не оповещения. Знак & — это логический оператор И, а знак | — это логический оператор ИЛИ. Ниже в таблице вы можете увидеть основные типы ошибок и их описание и обозначение.
Типы ошибок в PHP и их краткое описание
Значение | Константа (код ошибки) | Краткое описание | Есть возможность перехватить? |
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() |
Да |
2048 | E_STRICT | Сообщения от исполнительной среды с рекомендациями по улучшению качества кода, что позволит обеспечить лучшее взаимодействие и совместимость кода | — |
4096 | E_RECOVERABLE_ERROR | Опасная, но не фатальная ошибка (например, несоответствие типа). Такие ошибки указывают, что, вероятно, возникла опасная ситуация, но обработка скриптов стабильна. Если ошибка не обрабатывается функцией, выполнение приложения прерывается | Да |
8192 | E_DEPRECATED | Предупреждение об использовании устаревшей функции или конструкции. Включается для того, чтобы вы были предупреждены о коде, который не будет работать в будущих версиях PHP | Да |
16384 | E_USER_DEPRECATED | Предупреждение об использовании устаревшей функции или конструкции, инициированное в коде скрипта пользователем, с помощью PHP функции trigger_error() |
Да |
32767 | E_ALL | Все поддерживаемые ошибки, предупреждения и замечания | Нет |
Стандартным обработчиком ошибок для PHP является встроенный обработчик. Но можно изменить обработчик ошибок, чтобы использовать свой специальный обработчик ошибок с помощью функции set_error_handler()
. Те ошибки, которые обозначены в таблице как такие, которые возможно перехватить, могут обрабатываться вашей кастомной функцией обработки ошибок. Другие ошибки более сложны и серьезны и должны решаться PHP.
На сегодня все, спасибо за внимание!