Несовместимые временные 404 на всю установку | Ошибка PHP с post-template.php

9

Я глубоко сбит с толку этим: у меня установлена ​​WordPress на Media Temple GS (одна из многих, которые работают нормально и настроены почти одинаково), что иногда дает мне 404-е годы. Когда это происходит, я получаю 3 ошибки вместе в моем журнале ошибок PHP:

[01-Nov-2013 22:20:50 UTC] PHP Notice:  Trying to get property of non-object in /nfs/---/---/mnt/---/domains/---.---/html/wp-includes/post-template.php on line 275
[01-Nov-2013 22:20:50 UTC] PHP Notice:  Trying to get property of non-object in /nfs/---/---/mnt/---/domains/---.---/html/wp-includes/post-template.php on line 209
[01-Nov-2013 22:20:50 UTC] PHP Notice:  Trying to get property of non-object in /nfs/---/---/mnt/---/domains/---.---/html/wp-includes/post-template.php on line 29

Первые два относятся к $postобъекту и третий к этому: get_post()->ID;что я думаю, это создание $postобъекта.

У меня есть два из этих идентичных трио сообщений об ошибках почти с 25-минутным интервалом [выключено на 2 с].

Я пробовал поддержку MT, но они думают, что это ошибка WP. Я использую последнюю версию WP, но у меня возникла эта проблема с более ранними версиями.

У меня было включено 2 плагина: W3 Total Cache и AJAX Thumbnail Rebuild

Я протестировал с и без плагина кеша, и проблема остается. Я просто отключил плагин для миниатюр, чтобы понять, имеет ли это какое-то значение.

Пожалуйста, помогите это сводит меня с ума! [и я хотел публично запустить этот сайт сегодня]

РЕДАКТИРОВАТЬ

Я должен был также упомянуть, что я видел эту ошибку на некоторых, но не на всех других установках WordPress на этом сервере. Я думаю, но не могу быть уверен на 100%, что те, которые показывают ошибки, являются более новыми установками, чем те, которые работают нормально. Хотя все установки полностью обновлены.

EDIT2

Я просто работаю над другим проектом WP и понял, по крайней мере, что означают эти 3 ошибки. Я могу воспроизвести именно эти три ошибки php, перейдя на страницу индекса с пользовательским типом записи, который не существует. Однако это не объясняет, почему это вызвало 404 в этом вопросе, тем более, что это происходит не только на пользовательских индексных страницах типов записей. Однако я думаю, что это должно быть как-то связано с пользовательскими типами постов.

IIZ
источник
Sidewide означает на всех страницах / постах / категориях, но не в wp-admin, так что в основном на любой странице внешнего интерфейса? PS: отключение плагина W3TC не сразу удаляет все функции кэширования. Лучше всего отключить кэширование на главной странице настроек плагина, и это действительно звучит как проблема конфигурации кэширования / кэширования.
s1lv3r
Да, sideside означает любую страницу интерфейса, но ничего в wp-admin. Я не думаю, что это может иметь какое-либо отношение к плагину W3 Cache, так как у меня была эта проблема в разработке до того, как она была включена.
2011 г.
2
Это только три уведомления? Я догадываюсь, что ваша база данных выпадает, но это обычно вызывает ее собственное уведомление.
Мэтью Бойнс
Когда я получаю эту ошибку, я получаю только эти три уведомления. Это происходит между 2-3 раза в час, и я не вижу никакой картины в его времени. Это может случиться при попытке доступа к любой странице, а не только к домашнему / архиву. Уровень логина PHP установлен равным 32767 [E_ALL]. Я думаю, что ранее пробовал WP_DEBUG и ничего не видел, но не уверен. Теперь этот сайт является живым [! нет варианта по этому вопросу. Но я могу сделать еще одну скрытую установку с такими же параметрами, как этот, если вы думаете, что это того стоит.
2011 г.
1
Можете ли вы одновременно просматривать журналы доступа, чтобы выяснить, какой запрос вызывает его?
Jezmck

Ответы:

1

Существует два типа ошибок 404: сгенерированные WordPress и сгенерированные сервером.

В некоторых серверных средах сервер 404 может отображаться неточно в случае перегрузки ЦП или из-за определенных случаев неправильной конфигурации и т. Д. Обычно сгенерированные сервером ошибки 404 будут отображать что-то вроде «Nginx» или «Apache» в нижней части окна. страница (зависит от типа сервера).

В других ситуациях «ложноположительные» ошибки 404 могут генерироваться WordPress (PHP), потому что плагины безопасности блокируют доступ к загруженным ресурсам:

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

https://wordpress.org/support/topic/getting-false-positive-404-errors-with-newest-update/

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

Это также может быть вызвано плохо закодированной темой или плагином. Проверьте, установлена ​​ли общая тема или плагин на всех задействованных сайтах. И если эта проблема возникает только на хостинге Media Temple, возможно, они что-то неправильно настроили или даже ваш сервер слишком загружен ...

Джесси Никлес
источник
0

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

Вы можете создать свой собственный обработчик ошибок, чтобы добавить трассировку стека и запросить информацию в журнал ошибок.

set_error_handler('wpse_120959_handle_error');

function wpse_120959_handle_error( $errno, $errstr, $errfile, $errline ) {

    if( $errno === E_USER_NOTICE ) {

        $error = PHP_EOL . PHP_EOL;

        $error .= sprintf('You have an error notice: "%s" in file "%s" at line: "%s".', $errstr, $errfile, $errline);
        $error .= wpse_120959_generate_stack_trace() . PHP_EOL;

        $error .= 'Request information:' . PHP_EOL;
        $error .= wpse_120959_generate_http_request_info();

        error_log( $error );
    }
}

// Function from php.net http://php.net/manual/en/function.debug-backtrace.php#112238
function wpse_120959_generate_stack_trace() {

    $e = new \Exception();

    $trace = explode( "\n" , $e->getTraceAsString() );

    // reverse array to make steps line up chronologically

    $trace = array_reverse( $trace );

    array_shift( $trace ); // remove {main}
    array_pop( $trace ); // remove call to this method

    $length = count( $trace );
    $result = array();

    for ($i = 0; $i < $length; $i++) {
        $result[] = ($i + 1)  . ')' . substr( $trace[$i], strpos( $trace[$i], ' ' ) ); // replace '#someNum' with '$i)', set the right ordering
    }

    $result = implode("\n", $result);
    $result = "\n" . $result . "\n";

    return $result;
}

function wpse_120959_generate_http_request_info() {

    $request_info = '';
    $request_info_format = "%s %s %s\nHTTP headers:\n";

    $headers = wpse_120959_get_headers();
    $header_format = "%s: %s \n";

    $request_method  = filter_input( INPUT_SERVER, 'REQUEST_METHOD', FILTER_SANITIZE_STRING );
    $request_uri     = filter_input( INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING );
    $server_protocol = filter_input( INPUT_SERVER, 'SERVER_PROTOCOL', FILTER_SANITIZE_STRING );

    $request_info = sprintf( $request_info_format, $request_method, $request_uri, $server_protocol );

    foreach ( $headers as $name => $value ) {
        $request_info .= sprintf( $header_format, $name, $value );
    }

    return $request_info;
}

function wpse_120959_get_headers() {

    $headers = [];

    foreach ($_SERVER as $name => $value) {

        if (preg_match('/^HTTP_/', $name ) ) {

            $value = filter_input( INPUT_SERVER, $name, FILTER_SANITIZE_STRING );

            $name = strtr( substr( $name, 5 ), '_', ' ');
            $name = ucwords( strtolower( $name ) );
            $name = strtr( $name, ' ', '-' );

            // add to list
            $headers[$name] = $value;
        }
    }

    return $headers;
}

Вы можете проверить, работает ли это, добавив trigger_error где-нибудь в вашем коде, например, в single.phpфайле.

trigger_error('Annoying notice');

Ваш журнал ошибок должен выводить что-то вроде этого:

2018/07/02 14:26:00 [error] 714#714: *58 FastCGI sent in stderr: "PHP message:

You have an error notice: "Annoying notice" in file "/var/www/test/content/themes/twentyseventeen/single.php" at line: "19".
1) /var/www/test/index.php(17): require('/var/www/test/w...')
2) /var/www/test/wordpress/wp-blog-header.php(19): require_once('/var/www/test/w...')
3) /var/www/test/wordpress/wp-includes/template-loader.php(74): include('/var/www/test/c...')
4) /var/www/test/content/themes/twentyseventeen/single.php(19): trigger_error('Annoying notice')
5) [internal function]: wpse_120959_handle_error(1024, 'Annoying notice', '/var/www/test/c...', 19, Array)

Request information:
GET /hello-world/ HTTP/1.1
HTTP headers:
Accept-Language: en-US;q=0.8,en;q=0.7
Accept-Encoding: gzip, deflate
Referer: http://test.local/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
User-Agent: Mozilla/5.0 AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
Upgrade-In" while reading upstream, client: 192.168.10.1, server: test.local, request: "GET /hello-world/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "test.local", referrer: "http://test.local"

С такого рода сообщениями будет гораздо легче выяснить, в чем проблема.

kierzniak
источник