Диагностика проблемы PHP Fatal Error в WordPress
После обновления WordPress, темы или плагинов нередко появляется ошибка типа PHP Fatal Error, которая приводит к белому экрану или недоступности сайта. Чтобы разобраться, что именно вызвало сбой, нужно выполнить несколько шагов диагностики.
Как определить источник ошибки
- Активируйте режим отладки WordPress: в
wp-config.phpдобавьте или измените строки:
Это позволит записать ошибки в файлdefine('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);wp-content/debug.logбез вывода их на экран. - Проверьте файл
debug.logна наличие точного текста ошибки: в большинстве случаев там будет указано, какой файл или функция вызвали фатал. - Обратите внимание на сообщения вида
Call to undefined function,Cannot redeclare function,Allowed memory size exhausted— они указывают на конкретную проблему. - Если проблема возникла после обновления плагина или темы, попробуйте временно деактивировать их по FTP, переименовав папку
wp-content/plugins/имя_плагинаилиwp-content/themes/имя_темы.
Пример типичной ошибки из debug.log
[26-Jun-2024 14:22:30 UTC] PHP Fatal error: Uncaught Error: Call to undefined function some_function() in /var/www/html/wp-content/plugins/custom-plugin/custom-plugin.php:56
Stack trace:
#0 /var/www/html/wp-includes/class-wp-hook.php(308): custom_plugin_function()
#1 /var/www/html/wp-includes/plugin.php(205): WP_Hook->apply_filters()
#2 /var/www/html/wp-settings.php(345): do_action('init')
#3 /var/www/html/wp-config.php(90): require_once('/var/www/html/w...')
#4 /var/www/html/wp-load.php(37): require_once('/var/www/html/w...')
#5 /var/www/html/wp-blog-header.php(13): require_once('/var/www/html/w...')
#6 /var/www/html/index.php(17): require('/var/www/html/w...')
#7 {main}
thrown in /var/www/html/wp-content/plugins/custom-plugin/custom-plugin.php on line 56
Пошаговое решение: исправляем PHP Fatal Error
Шаг 1. Включение отладки и анализ логов
Как описано выше, включите WP_DEBUG и изучите debug.log. Найдите точное место ошибки и причину — отсутствие функции, конфликт версий, превышение лимита памяти.
Шаг 2. Отключение проблемных плагинов/тем
По названию файла из лога определите, какой плагин/тема вызвали ошибку. Через FTP перейдите в wp-content/plugins или wp-content/themes и переименуйте папку, чтобы отключить компонент.
Например, если ошибка в custom-plugin, переименуйте папку в custom-plugin-disabled.
Шаг 3. Проверка версии PHP и совместимости
Убедитесь, что версия PHP на сервере соответствует требованиям WordPress и плагинов. Многие современные плагины требуют минимум PHP 7.4 или выше. Выполните команду в терминале (если есть доступ):
php -vИли создайте файл phpinfo.php со следующим содержимым и откройте его в браузере:
<?php
phpinfo();Шаг 4. Увеличение лимита памяти PHP
Если ошибка связана с исчерпанием памяти, добавьте в wp-config.php строку:
define('WP_MEMORY_LIMIT', '256M');Или настройте memory_limit в php.ini.
Шаг 5. Проверка конфликтов кода
Если ошибка связана с повторным объявлением функций или классов, возможно, плагин подключается дважды или есть конфликт между плагинами. Проверьте код на предмет повторных require или include без защит типа function_exists.
if (!function_exists('some_function')) {
function some_function() {
// тело функции
}
}Проверка результата после внедрения
- Очистите кэш браузера и, если используете кеширующие плагины (например, Clearfy Pro), очистите кеш сайта.
- Откройте сайт в режиме инкогнито, чтобы проверить загрузку без кэша.
- Проверьте файл
debug.logна новые ошибки — при отсутствии записей и работоспособном сайте проблема решена. - Используйте инструмент
Query Monitorдля проверки загрузки и ошибок на странице. - Если ошибка возникала при выполнении конкретного действия, повторите его.
Частые ошибки и способы их исправления
- Ошибка 1: Call to undefined function — функция объявлена в плагине, который не загружается. Решение: проверить порядок подключения файлов и зависимости.
- Ошибка 2: Allowed memory size exhausted — лимит памяти недостаточен. Решение: увеличить
WP_MEMORY_LIMITиmemory_limit. - Ошибка 3: Cannot redeclare function — функция объявлена дважды. Решение: использовать
function_existsили исправить дублирующий код. - Ошибка 4: Несовместимость версии PHP — плагин требует более новую версию. Решение: обновить PHP на сервере или заменить плагин.
Практические советы по безопасности и производительности
- Резервное копирование: перед обновлением всегда создавайте полные бэкапы сайта и базы данных.
- Тестирование на стейджинге: проверяйте обновления на тестовом сервере, чтобы избежать сбоев на рабочем сайте.
- Мониторинг ошибок: используйте плагины типа Query Monitor или логи сервера для оперативного выявления проблем.
- Избегайте устаревших плагинов: удаляйте и заменяйте плагины без поддержки и обновлений.
- Оптимизация кода: при разработке своих плагинов и тем используйте проверки существования функций и классов, избегайте глобальных переменных.
Сравнение методов исправления PHP Fatal Error
| Метод | Преимущества | Недостатки |
|---|---|---|
| Отключение плагинов/тем через FTP | Быстрое локальное решение без доступа в админку | Требует FTP/хостинг доступа, может привести к потере функционала |
| Включение WP_DEBUG и анализ логов | Позволяет точно найти причину ошибки | Не исправляет ошибку сам по себе |
| Увеличение лимита памяти | Решает проблемы с нехваткой ресурсов | Временное решение, не исправляет корень проблемы |
| Исправление конфликтов в коде | Устраняет ошибки навсегда | Требует навыков PHP и времени |