404s sementara yang tidak konsisten pada keseluruhan instal | Kesalahan PHP dengan post-template.php

9

Saya sangat bingung dengan yang satu ini: Saya memiliki WordPress menginstal pada Media Temple GS [salah satu dari banyak yang berfungsi dengan baik dan dikonfigurasi hampir persis sama] yang kadang-kadang memberi saya 404s di seluruh dunia. Ketika ini terjadi, saya mendapatkan 3 kesalahan bersama di log kesalahan PHP saya:

[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

Dua yang pertama berhubungan dengan $postobjek & 3 untuk ini: get_post()->ID;Yang saya pikir adalah penciptaan $postobjek.

Saya memiliki dua dari ketiga pesan kesalahan identik ini yang hampir persis terpisah 25 menit [mati oleh 2 detik].

Saya sudah mencoba dukungan MT tetapi mereka berpikir itu pasti kesalahan WP. Saya menjalankan versi WP terbaru tetapi telah mengalami masalah ini dengan versi sebelumnya.

Saya sudah mengaktifkan 2 plugin: W3 Total Cache & AJAX Thumbnail Rebuild

Saya telah menguji dengan dan tanpa plugin cache dan masalahnya masih ada. Saya baru saja menonaktifkan plug thumbnail untuk melihat apakah ada bedanya.

Tolong bantu ini membuat saya gila! [dan saya ingin secara terbuka meluncurkan situs ini hari ini]

EDIT

Saya seharusnya juga menyebutkan bahwa saya telah melihat kesalahan ini pada beberapa tetapi tidak semua menginstal wordpress lain di server ini. Saya pikir tetapi tidak dapat 100% yakin, bahwa kesalahan yang ditampilkan adalah pemasangan yang lebih baru daripada yang berfungsi dengan baik. Meskipun semua instalasi sepenuhnya diperbarui.

EDIT2

Saya hanya bekerja pada proyek WP lain dan menyadari setidaknya apa arti 3 kesalahan itu. Saya dapat mereproduksi ketiga kesalahan php tersebut dengan masuk ke halaman indeks dari jenis tulisan khusus yang tidak ada. Namun ini tidak menjelaskan mengapa hal itu akan menyebabkan 404 dalam pertanyaan ini, terutama karena itu tidak hanya terjadi pada halaman indeks jenis posting kustom. Namun saya pikir ini harus terkait dengan jenis posting khusus.

iiz
sumber
Sidewide berarti pada semua halaman / posting / kategori tetapi tidak di wp-admin, jadi pada dasarnya ada halaman depan? ps: menonaktifkan plugin W3TC tidak segera menghapus semua fungsi caching. Cara yang lebih baik adalah dengan menonaktifkan caching pada halaman opsi utama plugin dan ini benar-benar terdengar seperti masalah konfigurasi caching / cache.
s1lv3r
Ya samping berarti halaman depan apa pun tetapi tidak ada di wp-admin. Saya tidak berpikir itu ada hubungannya dengan plugin W3 Cache karena saya mengalami masalah ini sesekali dalam pengembangan sebelum itu diaktifkan.
iiz
2
Apakah hanya tiga pemberitahuan itu? Firasat saya adalah bahwa database Anda drop out, tetapi itu biasanya akan memicu pemberitahuan sendiri.
Matthew Boynes
Saya hanya mendapatkan tiga pemberitahuan ini tepat saat kesalahan ini terjadi. Itu terjadi antara 2-3 kali dalam satu jam dan saya tidak dapat melihat pola dalam pengaturan waktunya. Itu bisa terjadi ketika mencoba mengakses halaman apa pun bukan hanya rumah / arsip. Level loggin PHP diatur ke 32767 [E_ALL]. Saya pikir saya sebelumnya mencoba WP_DEBUG dan tidak melihat apa pun tetapi tidak dapat memastikan. Sekarang situs yang dimaksud adalah langsung [! tidak ada opsi untuk ini]. Tapi saya bisa melakukan instalasi tersembunyi lain dengan parameter yang sama seperti ini jika Anda pikir itu akan sia-sia.
iiz
1
Bisakah Anda melihat log akses pada saat yang sama untuk mengetahui permintaan apa yang memicu itu?
jezmck

Jawaban:

1

Ada dua jenis kesalahan 404: yang dihasilkan WordPress, dan yang dihasilkan server.

Dalam beberapa lingkungan server, 404s dapat ditampilkan secara tidak akurat oleh server jika CPU kelebihan beban atau karena kesalahan konfigurasi tertentu, dll. Biasanya kesalahan 404 yang dihasilkan server akan mengatakan sesuatu seperti "Nginx" atau "Apache" di bagian bawah halaman (tergantung pada jenis server).

Dalam situasi lain, kesalahan "false positive" 404 dapat dihasilkan oleh WordPress (PHP) karena plugin keamanan memblokir akses ke sumber daya yang dimuat:

Mengapa kadang-kadang saya mendapatkan kesalahan 404 ketika saya mencoba memperbarui halaman dengan Elementor?

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

Coba nonaktifkan plugins keamanan, hapus cache, dan segarkan halaman. Modul keamanan seperti ModSecurity yang diinstal di server Anda juga berpotensi menjadi penyebabnya.

Ini juga bisa disebabkan oleh tema atau plugin yang tidak memiliki kode. Periksa apakah ada tema atau plugin umum yang dipasang di semua situs yang terlibat. Dan jika masalah ini hanya terjadi pada hosting Media Temple, mungkin saja mereka mengalami kesalahan konfigurasi, atau bahkan server Anda terlalu banyak memuat ...

Jesse Nickles
sumber
0

Anda tidak memiliki cukup informasi untuk menyelesaikan masalah Anda. Coba tambahkan jejak tumpukan penuh dan minta informasi ke log kesalahan Anda untuk menyelidiki masalah.

Anda dapat membuat penangan kesalahan khusus Anda sendiri untuk menambahkan jejak stack dan meminta informasi ke log kesalahan Anda.

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;
}

Anda dapat memeriksa apakah ini berfungsi dengan menambahkan trigger_error di suatu tempat dalam kode Anda misalnya dalam single.phpfile.

trigger_error('Annoying notice');

Log kesalahan Anda akan menampilkan sesuatu seperti itu:

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"

Dengan pesan seperti ini akan lebih mudah untuk mengetahui di mana masalahnya.

kierzniak
sumber