Перейти к содержимому

error_reporting()

Введение

В этой статье мы обсудим функции отчёта об ошибках в PHP. Отчёт об ошибках — важный аспект разработки, помогающий разработчикам выявлять и исправлять проблемы в коде. Мы рассмотрим различные функции отчёта об ошибках, доступные в PHP, и научимся эффективно их использовать.

Важность отчёта об ошибках

Отчёт об ошибках играет ключевую роль в обеспечении стабильности приложения и качества пользовательского опыта. Без него выявление ошибок и багов становится сложной задачей, что может привести к снижению производительности. Правильная настройка отчёта об ошибках позволяет разработчикам понимать первопричину проблем и быстро их устранять, повышая качество кода и общую надёжность приложения.

Различные функции отчёта об ошибках в PHP

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

error_reporting()

Функция error_reporting() определяет, какие ошибки должны выводиться. В качестве аргумента она принимает битовую маску констант ошибок. Начиная с PHP 7.4, уровень отчёта по умолчанию равен E_ALL. Обратите внимание, что E_STRICT была удалена в PHP 8.0.

php
// Report all errors except notices
error_reporting(E_ALL & ~E_NOTICE);

ini_set()

Функция ini_set() динамически устанавливает значение параметра конфигурации. Она часто используется для включения или отключения отчёта об ошибках во время выполнения скрипта.

php
// Enable error display for the current script
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

set_error_handler()

Функция set_error_handler() регистрирует пользовательский обработчик ошибок, который будет вызываться при возникновении любой ошибки PHP. В качестве аргумента она принимает функцию-обработчик (callback). Эта функция должна принимать четыре параметра: уровень ошибки, сообщение об ошибке, имя файла и номер строки.

php
function customErrorHandler($errno, $errstr, $errfile, $errline) {
    echo "Error: [$errno] $errstr in $errfile on line $errline";
}
set_error_handler("customErrorHandler");

error_log() и trigger_error()

  • error_log() отправляет сообщение об ошибке в систему логирования сервера, файл или на удалённый адрес.
  • trigger_error() генерирует предупреждение, уведомление или ошибку пользовательского уровня, которые могут быть перехвачены пользовательским обработчиком ошибок.
php
// Log a custom message to a file
error_log("Custom error message", 3, "/var/log/php_errors.log");

// Generate a user-level notice
trigger_error("This is a user-generated notice", E_USER_NOTICE);

Лучшие практики эффективного отчёта об ошибках

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

Используйте функцию error_reporting()

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

Реализуйте пользовательский обработчик ошибок

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

Записывайте ошибки в файл

Запись ошибок в файл настоятельно рекомендуется для production-окружений. Этот метод позволяет отслеживать ошибки с течением времени, что упрощает выявление закономерностей и тенденций. Для записи ошибок в файл можно использовать такие инструменты, как Monolog или Log4PHP, либо встроенную функцию PHP error_log().

Заключение

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

Практика

Что можно сказать об отчёте об ошибках в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.