404s temporários inconsistentes em toda a instalação | Erro de PHP com post-template.php

9

Estou profundamente confuso com este: eu tenho uma instalação do WordPress em um Media Temple GS [um dos muitos que funcionam bem e são configurados quase exatamente da mesma maneira], o que ocasionalmente me dá 404s em todo o site. Quando isso acontece, recebo 3 erros juntos no meu log de erros do 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

Os dois primeiros dizem respeito ao $postobjeto e o terceiro a isso: get_post()->ID;que eu acho que é a criação do $postobjeto.

Eu tenho dois desses trios idênticos de mensagens de erro com exatamente exatamente 25 minutos de intervalo [2s].

Eu tentei o suporte ao MT, mas eles acham que deve ser um erro do WP. Estou executando a versão mais recente do WP, mas esse problema ocorreu nas versões anteriores.

Eu tinha dois plugins ativados: W3 Total Cache & AJAX Thumbnail Rebuild

Eu testei com e sem o plugin de cache e o problema persiste. Acabei de desativar o plug de miniatura para ver se faz alguma diferença.

Por favor, ajude isso está me deixando louco! [e eu queria lançar este site publicamente hoje]

EDITAR

Eu também deveria ter mencionado que eu vi esse erro em algumas, mas não em todas as outras instalações do wordpress neste servidor. Penso, mas não posso ter 100% de certeza, que aqueles que apresentam erros são instalações mais recentes do que as que funcionam bem. Embora todas as instalações sejam totalmente atualizadas.

EDIT2

Estou apenas trabalhando em outro projeto WP e percebi pelo menos o que esses três erros significam. Eu posso reproduzir exatamente esses três erros de php indo para a página de índice de um tipo de postagem personalizado que não existe. No entanto, isso não explica por que isso causaria o 404 nesta questão, especialmente porque isso não acontece apenas em páginas de índice de tipo de postagem personalizadas. No entanto, acho que isso deve estar relacionado aos tipos de postagem personalizados de alguma forma.

iiz
fonte
Lateral significa em todas as páginas / post / categorias, mas não no wp-admin, então basicamente qualquer página de front-end? ps: desativar o plug-in W3TC não remove toda a funcionalidade de cache imediatamente. A melhor maneira é desabilitar o cache na página de opções principais do plug-in e isso realmente soa como um problema de configuração de cache / cache.
S1lv3r
Sim na lateral significa qualquer página de front-end, mas nada no wp-admin. Eu não acho que ele possa ter algo a ver com o plug-in W3 Cache, pois eu estava tendo esse problema ocasionalmente em desenvolvimento antes de ser ativado.
IIz
2
Esses são os únicos três avisos? Meu palpite é que seu banco de dados está sendo desativado, mas isso normalmente acionaria seu próprio aviso.
Matthew Boynes
Recebo apenas esses três avisos exatamente quando esse erro ocorre. Isso acontece entre 2 a 3 vezes por hora e não vejo nenhum padrão em seu tempo. Isso pode acontecer ao tentar acessar qualquer página, não apenas a página inicial / arquivos. O nível de loggin do PHP é definido como 32767 [E_ALL]. Acho que tentei anteriormente o WP_DEBUG e não vi nada, mas não tenho certeza. Agora o site em questão está ativo [! nenhuma opção nisso]. Mas posso fazer outra instalação oculta com os mesmos parâmetros, se você acha que valeria a pena.
Iiz
11
Você pode procurar nos logs de acesso ao mesmo tempo para descobrir qual solicitação está acionando?
jezmck

Respostas:

1

Existem dois tipos de erros 404: gerado pelo WordPress e gerado pelo servidor.

Em alguns ambientes de servidor, os 404s podem ser exibidos incorretamente pelo servidor em casos de sobrecarga da CPU ou devido a certas instâncias de configuração incorreta etc. Geralmente, os erros 404 gerados pelo servidor dizem algo como "Nginx" ou "Apache" na parte inferior do página (depende do tipo de servidor).

Em outras situações, erros 404 "falsos positivos" podem ser gerados pelo WordPress (PHP) porque os plug-ins de segurança estão bloqueando o acesso aos recursos carregados:

Por que às vezes estou recebendo um erro 404 quando tento atualizar uma página com Elementor?

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

Tente desativar todos os plug-ins de segurança, limpar caches e atualizar a página. Módulos de segurança como ModSecurity instalados no servidor também podem ser a causa.

Também pode ser causado por um tema ou plugin mal codificado. Verifique se há um tema ou plug-in comum instalado em todos os sites envolvidos. E se esse problema ocorrer apenas na hospedagem do Media Temple, é possível que eles tenham algo mal configurado ou até mesmo que seu servidor esteja com muita carga ...

Jesse Nickles
fonte
0

Você não possui informações suficientes para resolver seu problema. Tente adicionar o rastreamento completo da pilha e solicitar informações ao seu log de erros para investigar um problema.

Você pode criar seu próprio manipulador de erros personalizado para adicionar rastreamento de pilha e solicitar informações ao seu log de erros.

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

Você pode verificar se isso está funcionando adicionando trigger_error em algum lugar do seu código, por exemplo, no single.phparquivo.

trigger_error('Annoying notice');

Seu log de erros deve gerar algo assim:

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"

Com esse tipo de mensagem, será muito mais fácil descobrir onde está o problema.

kierzniak
fonte