インストール全体で一貫性のない一時的な404が発生する| post-template.phpでのPHPエラー


9

私はこれに深く混乱しています:Media Temple GSにWordPressをインストールしました(多くは正常に動作し、ほぼ同じように設定されています)。これが発生すると、PHPエラーログに3つのエラーが一緒に記録されます。

[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

最初の2つは$postオブジェクトに関連し、3番目はこれに関連しています。get_post()->ID;これは$postオブジェクトの作成だと思います。

私はこれらの2つの同じ3つのエラーメッセージをほぼ正確に25分の間隔で[オフ2秒]持っています。

私はMTサポートを試しましたが、彼らはそれがWPエラーであるに違いないと考えています。最新バージョンのWPを実行していますが、以前のバージョンでこの問題が発生しました。

2つのプラグインを有効にしました:W3 Total CacheとAJAX Thumbnail Rebuild

私はキャッシュプラグインの有無にかかわらずテストしましたが、問題は解決しません。サムネイルプラグを無効にして、違いがあるかどうかを確認しました。

これが私を狂わせているのを助けてください![そしてこのサイトを本日公開したかった]

編集

私はまた、このサーバー上の他のワードプレスインストールのすべてではなく一部でこのエラーが発生したことを述べました。100%確実ではありませんが、エラーを表示しているものは、正常に機能しているものよりも新しいインストールであると思います。すべてのインストールは完全に更新されますが。

EDIT2

私は別のWPプロジェクトに取り組んでいて、少なくともこれら3つのエラーの意味を理解しました。存在しないカスタム投稿タイプのインデックスページに移動することで、これら3つのphpエラーを正確に再現できます。ただし、特にカスタム投稿タイプのインデックスページでのみ発生するわけではないので、この質問で404が発生する理由は説明されていません。しかし、これは何らかの形でカスタム投稿タイプに関連しているに違いないと思います。


サイドワイドとは、すべてのページ/投稿/カテゴリを意味しますが、wp-adminでは意味しません。ps:W3TCプラグインを無効にしても、すべてのキャッシュ機能がすぐに削除されるわけではありません。より良い方法は、プラグインのメインオプションページでキャッシュを無効にすることです。これは、キャッシュ/キャッシュ構成の問題のように聞こえます。
s1lv3r 2013年

はいサイドワイドとは、フロントエンドページを意味しますが、wp-adminでは何も意味しません。W3キャッシュプラグインが有効になる前に開発で時々この問題が発生したため、W3キャッシュプラグインとは関係がないと思います。
iiz

2
これらの通知は3つだけですか?私の直感は、データベースが削除されていることですが、それは通常、独自の通知をトリガーします。
Matthew Boynes 2013年

このエラーが発生したとき、私はこれら3つの通知のみを受け取ります。これは1時間に2〜3回発生し、タイミングにパターンは見られません。ホーム/アーカイブだけでなく、任意のページにアクセスしようとすると発生する可能性があります。PHPロギンのレベルは32767 [E_ALL]に設定されています。私は以前にWP_DEBUGを試し、何も見なかったと思いますが、確信が持てません。現在、問題のサイトはライブです[!このオプションはありません]。しかし、価値があると思われる場合は、これと同じパラメータを使用して別の非表示のインストールを実行できます。
iiz、2013年

1
同時にアクセスログを調べて、どの要求がそれをトリガーしているかを確認できますか?
jezmck 2013年

回答:


1

404エラーには、WordPress生成とサーバー生成の2つのタイプがあります。

一部のサーバー環境では、CPUが過負荷の場合、または特定の設定ミスなどが原因で、サーバーによって404が不正確に表示される可能性があります。通常、サーバーで生成された404エラーは、ページ(サーバーの種類によって異なります)。

他の状況では、セキュリティプラグインが読み込まれたリソースへのアクセスをブロックしているため、WordPress(PHP)によって「誤検知」404エラーが生成される可能性があります。

Elementorでページを更新しようとすると404エラーが発生する場合があるのはなぜですか?

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を追加します。

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"

この種のメッセージを使用すると、問題がどこにあるかを見つけるのがはるかに簡単になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.