Почему важно отключать 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Если доступа нет, попросите хостинг-провайдера внести изменения.
Как проверить, что вывод ошибок действительно отключен
После внесения изменений:
- Очистите кеш браузера и кеш сайта (если используется кеш-плагин).
- Откройте сайт и вызовите ошибку вручную. Например, временно добавьте в
functions.phpтемы код, вызывающий ошибку:
// Временно вызвать ошибку
trigger_error('Test error for display', E_USER_NOTICE);Если ошибка не отображается на сайте, значит вывод ошибок отключён.
- Удалите или закомментируйте этот тестовый код.
Частые ошибки при отключении 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 | Серверный конфиг | Самый низкоуровневый метод | Доступ часто ограничен, требует перезагрузки сервера |