wpurok.ru wordpress WPUrok

Как удалить PHP-выбросы в WordPress без потери функционала

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);
×
Скидки улетают в космос!

-20% на премиум темы
и плагины WordPress

Поймать скидку