전체 설치시 일관되지 않은 임시 404 | post-template.php의 PHP 오류


9

나는 이것에 깊이 혼란스러워한다. 나는 미디어 템플 GS에 워드 프레스를 설치했다. (정상적으로 작동하고 거의 동일하게 구성된 많은 것들 중 하나) 때때로 사이트 전체에 404를 주었다. 이 일이 발생하면 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

첫 번째 두 사람은 관계 $post: 개체 및이에 3 get_post()->ID;난의 창조라고 생각 $post객체입니다.

거의 동일한 25 분 간격의 오류 메시지 2 개 (2 초 간격)가 있습니다.

MT 지원을 시도했지만 WP 오류 여야한다고 생각합니다. 최신 버전의 WP를 실행하고 있지만 이전 버전에서이 문제가 발생했습니다.

나는 2 개의 플러그인을 사용하도록 설정했습니다 : W3 Total Cache & AJAX Thumbnail Rebuild

캐시 플러그인을 사용하거나 사용하지 않고 테스트했지만 문제가 지속됩니다. 썸네일 플러그를 비활성화하여 차이가 있는지 확인했습니다.

이것이 나를 미치게 도와주세요! [그리고 오늘이 사이트를 공개적으로 시작하고 싶었습니다]

편집하다

또한이 서버의 다른 워드 프레스 설치 중 일부는 아니지만이 오류가 발생했다고 언급 했어야합니다. 나는 100 % 확신 할 수는 없지만 오류가있는 사람들은 잘 작동하는 것보다 새로운 설치라고 생각합니다. 모든 설치가 완전히 업데이트되었지만.

편집 2

다른 WP 프로젝트를 진행 중이며 적어도 3 가지 오류의 의미를 깨달았습니다. 존재하지 않는 사용자 정의 게시물 유형의 색인 페이지로 이동하여 세 가지 PHP 오류를 정확하게 재현 할 수 있습니다. 그러나 이것이 왜이 질문에 404를 일으키는 지 설명하지 않습니다. 특히 맞춤 게시물 유형 색인 페이지에서만 발생하는 것은 아닙니다. 그러나 나는 이것이 어떤 방식 으로든 사용자 정의 게시물 유형과 관련이 있어야한다고 생각합니다.


Sidewide 는 모든 페이지 / 게시물 / 카테고리에서 wp-admin이 아닌 것을 의미하므로 기본적으로 프론트 엔드 페이지는 무엇입니까? 추신 : W3TC 플러그인을 비활성화해도 모든 캐싱 기능이 즉시 제거되지는 않습니다. 더 좋은 방법은 플러그인의 기본 옵션 페이지에서 캐싱을 비활성화하는 것이며 캐싱 / 캐시 구성 문제처럼 들립니다.
s1lv3r

예 측면은 모든 프론트 엔드 페이지를 의미하지만 wp-admin에는 없습니다. 활성화되기 전에 개발 중에 때때로이 문제가 발생했기 때문에 W3 캐시 플러그인과 관련이 있다고 생각하지 않습니다.
iiz

2
그게 유일한 세 가지 통지입니까? 내 직감은 데이터베이스가 삭제되는 것이지만 일반적으로 자체 알림을 트리거합니다.
Matthew Boynes

이 오류가 발생하면 정확히 세 가지 알림 만받습니다. 그것은 시간당 2-3 번 발생하며 타이밍에 아무런 패턴이 없습니다. 홈 / 아카이브뿐만 아니라 모든 페이지에 액세스하려고 할 때 발생할 수 있습니다. PHP loggin 레벨은 32767 [E_ALL]로 설정되어 있습니다. 나는 이전에 WP_DEBUG를 시도했지만 아무것도 보지 못했지만 확신 할 수 없다고 생각합니다. 이제 해당 사이트가 운영 중입니다 [! 이 옵션은 없습니다]. 그러나 가치가 있다고 생각되면 이와 동일한 매개 변수로 다른 숨겨진 설치를 수행 할 수 있습니다.
iiz

1
액세스 로그에서 동시에 어떤 요청이 트리거되고 있는지 알 수 있습니까?
jezmck 2013

답변:


1

404 오류에는 WordPress 생성 및 서버 생성의 두 가지 유형이 있습니다.

일부 서버 환경에서 CPU 과부하 또는 특정 구성 오류 등으로 인해 서버에서 404가 부정확하게 표시 될 수 있습니다. 일반적으로 서버에서 생성 된 404 오류는 맨 아래에 "Nginx"또는 "Apache"와 같은 메시지가 표시됩니다. 페이지 (서버 유형에 따라 다름)

다른 상황에서는 보안 플러그인이로드 된 자원에 대한 액세스를 차단하기 때문에 WordPress (PHP)에 의해 "false positive"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.