PHP-выбросы (warnings, notices, deprecated) могут замедлять работу вашего сайта на WordPress и создавать излишний шум в логах. При этом полностью отключать отображение ошибок не стоит, так как они помогают выявлять проблемы в коде. В этой статье разберёмся, как грамотно настроить обработку PHP-выбросов в WordPress, чтобы не потерять важный функционал и не допустить снижения производительности.
Что такое PHP-выбросы и почему их нужно контролировать
PHP-выбросы — это сообщения интерпретатора PHP о потенциальных ошибках в коде, которые не прерывают выполнение скрипта, но сигнализируют о проблемах. К ним относятся:
- Notice — уведомления о незначительных ошибках, например, использование неинициализированной переменной;
- Warning — предупреждения, которые могут привести к ошибкам, например, попытка включить несуществующий файл;
- Deprecated — сообщения о том, что используемый код устарел и будет удалён в будущих версиях PHP.
В рабочей среде сайта вывод таких сообщений пользователям недопустим, так как это выглядит неаккуратно и может раскрыть уязвимости. Однако полностью подавлять ошибки без ведения логов — плохая практика. Нужно настроить правильный баланс.
Настройка обработки ошибок в WordPress через wp-config.php
Для контроля вывода ошибок в WordPress используйте константы в файле wp-config.php. Вот рекомендуемая настройка для продакшн-сайта:
define('WP_DEBUG', false); // Отключаем режим отладки в интерфейсе сайта
define('WP_DEBUG_LOG', true); // Включаем запись ошибок в файл wp-content/debug.log
define('WP_DEBUG_DISPLAY', false); // Отключаем вывод ошибок на экран
@ini_set('display_errors', 0); // Отключаем вывод ошибок PHPЭта конфигурация позволяет скрыть ошибки от посетителей, но сохранять их в логе для анализа разработчиком.
Если же вы хотите временно отладить проблему на локальном сервере, можно включить режим отладки с выводом ошибок:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
@ini_set('display_errors', 1);Не забывайте возвращать настройки обратно на продакшн.
Использование фильтров для избирательного подавления ошибок
В некоторых случаях полезно подавлять конкретные типы предупреждений, например, устаревшие функции, но при этом видеть серьёзные ошибки. Для этого можно использовать PHP-функцию set_error_handler и фильтровать ошибки по типу.
Пример функции с префиксом wpurok, которая игнорирует PHP Notice, но логирует остальные ошибки:
function wpurok_error_handler($errno, $errstr, $errfile, $errline) {
if ($errno === E_NOTICE || $errno === E_USER_NOTICE) {
// Игнорируем NOTICE
return true;
}
// Обрабатываем остальные ошибки стандартным способом
return false;
}
set_error_handler('wpurok_error_handler');Добавьте эту функцию и вызов в файл functions.php вашей темы или в отдельный плагин.
Использование плагинов для контроля PHP-выбросов и логирования
Для упрощения работы с ошибками можно использовать специальные плагины:
- Query Monitor — мощный инструмент для мониторинга ошибок, запросов к базе, хуков и PHP-выбросов прямо в админке WordPress.
- Debug Bar — добавляет панель отладки с информацией о PHP-ошибках, запросах и других проблемах.
- Log Deprecated Notices — фиксирует все устаревшие функции и файлы, которые используют темы и плагины.
Для установки плагина Query Monitor используйте следующий код через WP-CLI:
wp plugin install query-monitor --activateИли установите его через админку WordPress.
Практические советы по уменьшению PHP-выбросов в коде
Чтобы снизить количество предупреждений и уведомлений, следуйте таким рекомендациям:
- Проверяйте переменные перед использованием с помощью
issetилиempty; - Используйте современные функции и избегайте устаревших, проверяйте документацию PHP и WordPress;
- Избегайте включения файлов без проверки их существования (
file_exists); - Используйте строгие типы и аннотации, если позволяется версия PHP;
- Регулярно обновляйте темы и плагины, чтобы исключить поддержку устаревших функций.
Пример обработки переменной с предупреждением Notice
Вместо такого кода, который вызывает Notice:
echo $some_undefined_variable;Используйте проверку:
echo isset($some_undefined_variable) ? $some_undefined_variable : 'значение по умолчанию';Дополнительная автоматизация с помощью плагина Clearfy Pro
Плагин Clearfy Pro позволяет автоматически отключать устаревшие функции, оптимизировать загрузку скриптов и отключать ненужные уведомления, что также снижает количество PHP-выбросов. Это полезно для сайтов с большим количеством плагинов и сложной темой.
Clearfy Pro можно настроить через админпанель, выбрав соответствующие модули оптимизации.
Как анализировать и исправлять ошибки из логов
Файл логов wp-content/debug.log содержит записи всех ошибок и предупреждений. Для анализа:
- Подключитесь по FTP или через файловый менеджер хостинга;
- Скачайте и откройте файл
debug.logв текстовом редакторе; - Ищите повторяющиеся ошибки или устаревшие функции;
- На основе сообщений исправляйте код, обновляйте плагины или темы.
Если вы видите сообщения о deprecated функциях, попробуйте заменить их на современные аналоги, использующиеся в последней версии WordPress или PHP.
Пример сообщения об устаревшей функции и его исправление
Сообщение в логе:
[12-Apr-2024 10:23:45 UTC] PHP Deprecated: Function split() is deprecated in /wp-content/themes/mytheme/functions.php on line 45Вместо устаревшей split() используйте explode() или preg_split():
$parts = explode(',', $string);