Как отключить PHP Error Reporting на production сайте WordPress

Почему важно отключать PHP Error Reporting на рабочем сайте WordPress

На этапе разработки включённый вывод ошибок PHP помогает быстро находить и исправлять баги. Однако на продакшн-сайте его наличие приводит к ряду проблем: отображение ошибок пользователям, раскрытие путей и структуры файлов, снижение безопасности, нарушение внешнего вида сайта. Поэтому отключение error_reporting и display_errors — базовая задача для любого WordPress-разработчика при переходе в продакшн.

Диагностика текущих настроек PHP Error Reporting на WordPress

Чтобы проверить, включён ли вывод ошибок на вашем сайте, можно использовать один из следующих способов:

  • В админ-панели WordPress перейти в раздел Инструменты → Состояние сайта → Информация и проверить параметры PHP.
  • Создать файл phpinfo.php с содержимым <?php phpinfo(); ?> и открыть его в браузере, найти параметры error_reporting и display_errors.
  • Добавить временно в wp-config.php следующий код и обновить сайт, чтобы увидеть, выводятся ли ошибки:
ini_set('display_errors', 1);
error_reporting(E_ALL);

Если ошибки видны на страницах сайта — вывод включён.

Пошаговое отключение PHP Error Reporting на production

Шаг 1. Правка wp-config.php

В wp-config.php найдите или добавьте следующий блок, он должен идти до строки /* That's all, stop editing! Happy publishing. */:

// Отключаем вывод ошибок
@ini_set('display_errors', 0);
// Отключаем журналирование ошибок (можно включить для логов)
@ini_set('log_errors', 0);
// Настраиваем уровень отчетности ошибок
error_reporting(0);
// Отключаем WP_DEBUG и связанные параметры
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
define('WP_DEBUG_LOG', false);

Шаг 2. Проверка файла .htaccess на наличие директив вывода ошибок

Иногда вывод ошибок может быть включён через .htaccess, особенно при использовании Apache:

php_flag display_errors on

Если есть подобные строки, замените на:

php_flag display_errors off

Шаг 3. Проверка конфигурации php.ini

Если у вас есть доступ к php.ini, убедитесь, что там прописано:

display_errors = Off
error_reporting = 0

Если доступа нет, попросите хостинг-провайдера внести изменения.

Как проверить, что вывод ошибок действительно отключен

После внесения изменений:

  1. Очистите кеш браузера и кеш сайта (если используется кеш-плагин).
  2. Откройте сайт и вызовите ошибку вручную. Например, временно добавьте в functions.php темы код, вызывающий ошибку:
// Временно вызвать ошибку
trigger_error('Test error for display', E_USER_NOTICE);

Если ошибка не отображается на сайте, значит вывод ошибок отключён.

  1. Удалите или закомментируйте этот тестовый код.

Частые ошибки при отключении PHP Error Reporting и их исправление

  • Ошибка: Вывод ошибок всё равно виден на сайте.
    Причина: Параметры переопределяются плагинами или темой.
    Решение: Поиск по коду ini_set('display_errors', 1) или define('WP_DEBUG', true) и отключение таких строк.
  • Ошибка: Ошибки отображаются только в админке.
    Причина: Отдельные плагины или темы включают debug для админки.
    Решение: Проверьте файлы плагинов и темы на наличие override настроек.
  • Ошибка: Ошибки пишутся в логи, и они занимают много места.
    Решение: Включите ротацию логов или отключите логирование через ini_set('log_errors', 0);

Практические советы по безопасности и производительности

  • Выключайте debug и error_reporting на production всегда — это снижает риски утечки информации для потенциальных атак.
  • Используйте логирование ошибок в отдельный файл с контролем размера, чтобы быстро находить проблемы без вывода на экран.
  • Для WooCommerce и других сложных плагинов настройте отдельные уровни логирования, чтобы не загромождать логи.
  • Периодически проверяйте, что debug не включён после обновлений плагинов, тем и самого WordPress.

Сравнение способов отключения PHP Error Reporting

МетодГде правитьПлюсыМинусы
wp-config.phpФайл сайтаБыстро, универсально, не зависит от хостингаМожет быть переопределено плагинами
.htaccessФайл сервера ApacheВыключает на уровне сервераТолько для Apache, может отсутствовать доступ
php.iniСерверный конфигСамый низкоуровневый методДоступ часто ограничен, требует перезагрузки сервера
⭐⭐⭐⭐⭐