Вопрос или проблема
У нас есть несколько сайтов с пользовательской темой, создание которой нам помогли много лет назад. Когда мы обновляем PHP на сервере с версии 7.4.x до 8.2.x, мы получаем критическое сообщение об ошибке на большинстве страниц (заголовок загружается, но остальная часть страницы нет). Мы знаем, что это связано с файлами темы, но хотели бы получить более подробную информацию.
Когда мы включаем WP_DEBUG и многие сопутствующие параметры, мы просто не получаем никаких сообщений об ошибках или что-либо записанное в debug.log. Единственное сообщение об ошибке, которое мы можем получить, или которое вызовет запись в debug.log, это когда мы включаем более старый плагин, который выдает предупреждение о устаревании.
Следующее у нас сейчас в wp-config.php, но мы пробовали множество рекомендуемых опций, включая скрытие сообщения о фатальной ошибке.
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true );
define( 'WP_DEBUG_LOG', true );
define( 'SCRIPT_DEBUG', true );
Мы также пробовали отключить все плагины, что не дало никаких результатов.
И мы отредактировали файл php.ini для PHP 8.2 на сервере, установив display_errors = On
(по умолчанию выключено).
- Есть ли что-то еще, что мы можем попробовать, чтобы заставить отображаться сообщения об ошибках??
Ответ или решение
Критическая ошибка на страницах – WP_DEBUG не отображает ничего
Когда вы обновляете версию PHP на вашем сервере с 7.4.x до 8.2.x и получаете критическую ошибку на большинстве страниц, это может указывать на несовместимость вашей пользовательской темы с новой версией PHP. Поскольку вы упомянули, что заголовок загружается, а остальная часть страницы — нет, вполне вероятно, что какая-то функция или метод, используемый в ваших темах, больше не поддерживается или функционирует иначе в PHP 8.2.x.
Шаги для устранения проблем
Вот несколько шагов и рекомендаций, которые помогут вам выявить и, возможно, устранить причины возникновения критической ошибки и отсутствия сообщений об ошибках в WP_DEBUG.
-
Проверка на наличие ошибок синтаксиса или устаревших функций:
- Пройдитесь по файлам вашей темы и ищите устаревшие функции. PHP 8.2 может быть менее tolerant по отношению к устаревшим функциям, которые в предыдущих версиях могли не вызывать ошибок.
- Используйте редакторы кода с поддержкой синтаксических проверок, чтобы находить возможные ошибки.
-
Настройка конфигурации PHP:
- Убедитесь, что в вашем
php.ini
установлены следующие параметры:display_errors = On display_startup_errors = On error_reporting = E_ALL
- Это позволит вам отслеживать даже самые незначительные ошибки, возникающие на старте.
- Убедитесь, что в вашем
-
Использование альтернативных методов отладки:
- Попробуйте добавить следующий код в файл
functions.php
вашей темы, чтобы принудительно вывести ошибки:ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
- Это обеспечит вывод ошибок непосредственно на страницы, что может дать вам больше информации о том, что именно идет не так.
- Попробуйте добавить следующий код в файл
-
Отключение кэширования:
- Убедитесь, что вы отключили все системы кэширования (как на уровне плагинов, так и на уровне сервера), чтобы убедиться, что вы видите последние изменения конфигурации.
-
Проверка конфликта с плагинами:
- Вы упомянули, что отключили все плагины, но стоит также тщательно проверить, являются ли все плагины по-прежнему совместимыми с PHP 8.2. Обновите плагины до последних версий перед повторной проверкой.
-
Анализ журналов сервера:
- Проверьте журналы ошибок вашего веб-сервера (например, Apache или Nginx). Простое наличие критической ошибки в WordPress не всегда захватывает все детали — журналы сервера могут содержать более информативные сообщения.
-
Временная смена на стандартную тему:
- Если ни один из вышеперечисленных вариантов не помог, попробуйте переключиться на стандартную тему WordPress, такую как Twenty Twenty-One. Если проблема исчезает, вы можете быть уверены, что проблема связана именно с вашей пользовательской темой.
-
Обслуживание вашего кода:
- Убедитесь, что код вашей темы следует лучшим практикам разработки WordPress, и посмотрите документацию по обновлению, чтобы адаптировать существующие функции к новым требованиям PHP.
В итоге, когда вы проделаете все шаги, описанные выше, у вас будет больше шансов выяснить, в чем конкретно заключается ошибка. Если, несмотря на все усилия, проблемы сохраняются, возможно, вам стоит рассмотреть возможность привлечения специалиста по PHP или WordPress для более глубокого анализа вашей темы.