Ошибка Wordpress: нет журнала, нет сообщения, нет информации - PullRequest
0 голосов
/ 18 октября 2019

Я обновил не очень старую версию сайта Wordpress, а также обновил сервер с php 5.6 до php 7.2 (все это в локальной и контролируемой среде).

На сайте есть несколько плагинов инастраиваемая тема. Плагины, где отключены и повторно включены один за другим для контроля ошибок.

После обновления всех плагинов, которые позволили обновление, я отслеживал ошибки и решал их до того момента, где я нахожусь, где:

При вводе параметров темы и конфигурации другого плагина я получаю сообщение об ошибке:

Сайт испытывает технические трудности. Пожалуйста, проверьте свою электронную почту для получения инструкций.

Я не нахожу никакой трассировки ошибок в журнале ошибок apache / php и в журнале отладки Wordpress. Вся конфигурация PHP настроена на отображение всех ошибок, и в моем файле wp-config.php есть следующие строки для принудительной отладки и ведения журнала:

define('WP_DEBUG', true );
define('WP_DEBUG_LOG', true );
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Где я могу получить более конкретную информацию об этих ошибках? Я знаю, какие плагины / темы вызывают их, но мне нужно отладить и найти строки, где они происходят.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Итак, я нашел скрипт, где Wordpress обрабатывает фатальные ошибки и где он маскирует эти ошибки под общим сообщением:

Сайт испытывает технические трудности. Пожалуйста, проверьте свою электронную почту для получения инструкций.

Сценарий /wp-includes/class-wp-fatal-error-handler.php обрабатывает эти ошибки в блоке try..catch, что делает невозможным отображение сообщения об ошибке.

Таким образом, временное решение, только для отладки, состоит в том, чтобы изменить метод handle(), чтобы отключить try..catch и зарегистрировать сообщение об ошибке, как показано здесь:

отказ от ответственности: эта модификациядолжен быть отменен после того, как сайт запущен в производство, это только для целей отладки.

public function handle() {
        if ( defined( 'WP_SANDBOX_SCRAPING' ) && WP_SANDBOX_SCRAPING ) {
            return;
        }
        // comment try..catch
        // try {
            // Bail if no error found.
            $error = $this->detect_error();
            if ( ! $error ) {
                return;
            }

//log error message
error_log($error["message"]);
return;

            if ( ! isset( $GLOBALS['wp_locale'] ) && function_exists( 'load_default_textdomain' ) ) {
                load_default_textdomain();
            }

            if ( ! is_multisite() && wp_recovery_mode()->is_initialized() ) {
                wp_recovery_mode()->handle_error( $error );
            }

            // Display the PHP error template if headers not sent.
            if ( is_admin() || ! headers_sent() ) {
                $this->display_error_template( $error );
            }
        // } catch ( Exception $e ) {
            // Catch exceptions and remain silent.
        // }
    }

Функция error_log будет регистрировать ошибку до wp-content/debug.log в случае, если эта строка существует в вашем wp-config.phpfile:

define( 'WP_DEBUG_LOG', true );

Или в журнал ошибок Apache / php в противном случае.

Конечно, есть другие способы и другие конфигурации для отладки этих ошибок, но это легко.

0 голосов
/ 18 октября 2019

Пожалуйста, выполните следующие шаги:

  1. Вставьте приведенный ниже код в wp-config.php

    define ('WP_DEBUG', true);

    define ('WP_DEBUG_LOG', true);

    define ('WP_DEBUG_DISPLAY', true);

    @ ini_set ('display_errors', 1);

    define ('SCRIPT_DEBUG', true);

  2. создать файл с именем debug.log в каталоге wp-content.

3.Запустите ваш сайт WordPress, как раньше, и откройте файл debug.log в любом текстовом редакторе. Вы найдете все, что угодно (erros) здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...