Tüm kurulumda tutarsız geçici 404'ler | Post-template.php ile PHP hatası


9

Bu konuda derinden kafam karıştı: Media Temple GS'ye bir WordPress yüklemem var (iyi çalışan ve neredeyse tamamen aynı şekilde yapılandırılmış birçoğundan), bu arada bana 404'ler sitewide veriyor. Bu olduğunda birlikte PHP hata günlüğümde 3 hata alıyorum:

[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

İlk ikisi $postnesneyle, üçüncüsü ise: get_post()->ID;Bence $postnesnenin yaratılması .

Bu yaklaşık üç hata mesajından ikisine sahibim.

MT desteği denedim ama bir WP hatası olması gerektiğini düşünüyorum. WP'nin en son sürümünü çalıştırıyorum ancak bu sorunu daha önceki sürümlerle yaşadım.

2 eklentiyi etkinleştirdim: W3 Total Cache ve AJAX Thumbnail Rebuild

Önbellek eklentisi ile ve olmadan test ettim ve sorun devam ediyor. Herhangi bir fark yaratıp yaratmadığını görmek için küçük resim fişini devre dışı bıraktım.

Lütfen bu beni delirtiyor! [ve bugün bu siteyi herkese açık bir şekilde başlatmak istedim]

DÜZENLE

Ben de bu hatayı bazı gördüm ama bu sunucudaki diğer wordpress yüklemelerinin hepsini değil. Sanırım ama% 100 emin olamıyorum, hata gösterenlerin iyi çalışanlardan daha yeni yüklemeler olduğunu. Tüm yüklemeler tamamen güncellenmiş olsa da.

EDIT2

Sadece başka bir WP projesi üzerinde çalışıyorum ve en azından bu 3 hatanın ne anlama geldiğini anladım. Ben var olmayan bir özel yazı türünün dizin sayfasına giderek tam olarak bu üç php hataları çoğaltabilir. Ancak bu, özellikle yalnızca özel yazı tipi dizin sayfalarında olmadığı için, bu soruda neden 404'e neden olacağını açıklamıyor. Ancak bunun bir şekilde özel yazı türleriyle ilgili olması gerektiğini düşünüyorum.


Sidewide , tüm sayfalarda / yayında / kategoride anlamına gelir, ancak wp- admin'de değil, temelde herhangi bir ön uç sayfası mı? ps: W3TC eklentisini devre dışı bırakmak, tüm önbellekleme işlevlerini hemen kaldırmaz. En iyi yol, eklentinin ana seçenekler sayfasındaki önbelleği devre dışı bırakmaktır ve bu gerçekten bir önbellek / önbellek yapılandırma sorunu gibi görünür.
s1lv3r

Evet yan yana, herhangi bir ön uç sayfası anlamına gelir, ancak wp-admin'de hiçbir şey yoktur. W3 Cache eklentisi ile ilgili bir şey olabileceğini düşünmüyorum, çünkü bu problem gelişmeden önce bu problemi yaşıyordu.
iiz

2
Bunlar sadece üç uyarı mı? Benim önsezi, veritabanınızın bırakılıyor, ancak bu genellikle kendi bildirimini tetikler.
Matthew Boynes

Bu hata oluştuğunda yalnızca bu üç bildirimi alırım. Saatte 2-3 kez oluyor ve zamanlamasında hiçbir desen göremiyorum. Sadece ana sayfa / arşivlere değil, herhangi bir sayfaya erişmeye çalışırken de olabilir. PHP loggin seviyesi 32767 [E_ALL] olarak ayarlanmıştır. Daha önce WP_DEBUG denedim ve hiçbir şey görmedim ama emin olamıyorum düşünüyorum. Şimdi söz konusu site yayında [! bu konuda seçenek yok]. Ama buna değeceğini düşünüyorsanız, aynı parametrelerle başka bir gizli kurulum yapabilirim.
iiz

1
Hangi günlüklerin isteği tetiklediğini öğrenmek için erişim günlüklerine aynı anda bakabilir misiniz?
jezmck

Yanıtlar:


1

İki tür 404 hatası vardır: WordPress tarafından oluşturulan ve sunucu tarafından oluşturulan.

Bazı sunucu ortamlarında, 404'ler, CPU aşırı yüklenmesi veya belirli yanlış yapılandırma örnekleri vb. Nedeniyle sunucu tarafından hatalı bir şekilde görüntülenebilir. sayfası (sunucu türüne bağlıdır).

Diğer durumlarda, güvenlik eklentileri yüklü kaynaklara erişimi engellediği için "yanlış pozitif" 404 hataları WordPress (PHP) tarafından oluşturulabilir:

Elementor ile bir sayfayı güncellemeye çalıştığımda neden bazen 404 hatası alıyorum?

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

Güvenlik eklentilerini devre dışı bırakmayı, önbellekleri temizlemeyi ve sayfayı yenilemeyi deneyin. Sunucunuza yüklü ModSecurity gibi güvenlik modülleri de bunun nedeni olabilir.

Ayrıca, kötü kodlanmış bir tema veya eklentiden de kaynaklanabilir. İlgili tüm sitelerde ortak bir tema veya eklenti yüklü olup olmadığını kontrol edin. Ve bu sorun yalnızca Media Temple barındırma işleminde ortaya çıkarsa, yanlış yapılandırılmış bir şeyleri olması veya sunucunuzun çok fazla yük altında olması mümkündür ...


0

Sorununuzu çözmek için yeterli bilginiz yok. Bir sorunu araştırmak için hata günlüğünüze tam yığın izleme eklemeye ve bilgi istemeye çalışın.

Hata günlüğünüze yığın izleme ve istek bilgileri eklemek için kendi özel hata işleyicinizi oluşturabilirsiniz.

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

Kodunuzun herhangi bir yerine, örneğin single.phpdosyaya bir trigger_error ekleyerek bunun çalışıp çalışmadığını kontrol edebilirsiniz .

trigger_error('Annoying notice');

Hata günlüğünüz aşağıdaki gibi bir çıktı vermelidir:

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"

Bu tür mesajlarla sorunun nerede olduğunu bulmak çok daha kolay olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.