В сегодняшнем теоретическом уроке мы рассмотрим сложный и важный вопрос в PHP — выявление и осознание ошибок. Поскольку при создании и программировании скриптов и/или веб-приложений существует большая вероятность появления ошибок, не лишним будет знать коды (константы) ошибок и их описание. Эти возможные ошибки будут приведены для вашего удобства в табличном виде. После ознакомления с данным уроком вы будете лучше понимать запись в логах вида:
[ERROR]: [8][E_NOTICE] [Undefined variable: variable][script.php:1]
Подобный синтаксис сообщения об ошибке можно найти в файлах логов. А в браузере сообщения об ошибке будут несколько похожи: будут включать название файла, номер строки и краткое описание ошибки.
Поскольку 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
означает: все ошибки и не оповещения. Знак & — это логический оператор И, а знак | — это логический оператор ИЛИ. Ниже в таблице вы можете увидеть основные типы ошибок и их описание и обозначение.
Значение | Константа (код ошибки) | Краткое описание | Есть возможность перехватить? |
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.
На сегодня все, спасибо за внимание!
В современном мире цифрового маркетинга Facebook (Meta) остается одной из самых мощных платформ для продвижения…
Этот прибор стал незаменимым элементом арсенала представителей множества профессий, но особенно актуален среди военных. Тепловизор…
Постоянный поток новостей, рабочих задач и личных забот часто приводит к тому, что в голове…
В 2025 году конкуренция в e-commerce стала жесткой как никогда. Клиенты выбирают не только по…
Веб-дизайнеры и разработчики всегда ищут что-то новое и креативное, чтобы сделать свой сайт уникальным и…
Представьте ситуацию, когда вы пытаетесь обновить свой веб-сайт, но по какой-то причине у вас нет…