Невідповідні тимчасові 404 на всю установку | Помилка PHP з post-template.php


9

Я сильно збентежений цим: у мене встановлена ​​WordPress на Media Temple GS [одна з багатьох, яка працює добре і налаштована майже так само], що періодично дає мені 404s по всьому світу. Коли це відбувається, я отримую 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, але виникла ця проблема з більш ранніми версіями.

У мене було ввімкнено два плагіни: W3 Total Cache & AJAX Thumbnail Rebuild

Я тестував із плагіном кеша та без нього, і проблема не зберігається. Я щойно відключив міні-штекер, щоб побачити, чи має це значення.

Будь ласка, допоможіть, це мене зводить з розуму! [і я хотів сьогодні публічно запустити цей сайт]

EDIT

Я також повинен зазначити, що я бачив цю помилку на деяких, але не всіх інших Wordpress, встановлених на цьому сервері. Я думаю, але не можу бути на 100% впевнений, що ті, що показують помилки, є новішими встановленнями, ніж ті, що працюють добре. Хоча всі встановлення повністю оновлені.

EDIT2

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


Побічно означає на всіх сторінках / публікаціях / категоріях, але не в wp-admin, так що в основному на будь-якій сторінці фронтенд? ps: відключення модуля W3TC не видаляє всі функції кешування негайно. Кращий спосіб - відключити кешування на головній сторінці параметрів плагіна, і це справді звучить як проблема з налаштуванням кешування / кешу.
s1lv3r

Так, по всій стороні означає будь-яку сторінку фронтенду, але нічого в wp-admin. Я не думаю, що це може мати щось спільне з плагіном W3 Cache, оскільки у мене виникали такі проблеми періодично в розробці до того, як це було включено.
iiz

2
Це єдині три повідомлення? Моя думка полягає в тому, що ваша база даних випадає, але це, як правило, викликає власну увагу.
Меттью Бойнес

Я отримую лише ці три повідомлення саме тоді, коли виникає ця помилка. Це відбувається між 2-3 разів на годину, і я не бачу жодного зразка в його терміні. Це може статися при спробі отримати доступ до будь-якої сторінки, а не лише додому / архівів. Рівень входу в PHP встановлено на 32767 [E_ALL]. Я думаю, я раніше спробував WP_DEBUG і нічого не бачив, але не можу бути впевнений. Зараз сайт, про який йде мова, живе [! немає варіанту щодо цього]. Але я можу зробити ще одну приховану установку з тими ж параметрами, що і ця, якщо ви вважаєте, що це того варто.
IIZ

1
Чи можете ви одночасно заглянути в журнали доступу, щоб дізнатись, який запит викликає його?
jezmck

Відповіді:


1

Існує два типи помилок 404: генеровані WordPress та серверні.

У деяких серверних середовищах сервер 404 може бути неправильно відображений у випадках перевантаження процесора або через певні випадки неправильної конфігурації і т. Д. Зазвичай 404 помилки, створені сервером, скажуть щось на зразок "Nginx" або "Apache" внизу сторінка (залежить від типу сервера).

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

Чому я іноді отримую помилку 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;
}

Ви можете перевірити, чи працює це, додавши в код свого коду, наприклад, у 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"

З таким повідомленням буде набагато простіше з’ясувати, де проблема.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.