404 tạm thời không nhất quán trên toàn bộ cài đặt | Lỗi PHP với post-template.php


9

Tôi vô cùng bối rối vì điều này: Tôi có một bản cài đặt WordPress trên Media Temple GS [một trong số đó hoạt động tốt và được cấu hình gần như giống hệt nhau] đôi khi mang lại cho tôi chế độ chờ 404s. Khi điều này xảy ra, tôi gặp 3 lỗi trong nhật ký lỗi PHP của mình:

[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

Hai cái đầu tiên liên quan đến $postđối tượng & thứ 3 về điều này: get_post()->ID;mà tôi nghĩ là việc tạo ra $postđối tượng.

Tôi có hai bộ ba thông báo lỗi giống hệt nhau cách nhau gần 25 phút [tắt 2 giây].

Tôi đã thử hỗ trợ MT nhưng họ nghĩ đó phải là lỗi WP. Tôi đang chạy phiên bản WP mới nhất nhưng đã gặp sự cố này với các phiên bản trước.

Tôi đã bật 2 plugin: W3 Total Cache & AJAX Thumbnail Rebuild

Tôi đã thử nghiệm có và không có plugin bộ đệm và sự cố vẫn còn. Tôi vừa tắt trình cắm hình thu nhỏ để xem nó có khác biệt gì không.

Xin hãy giúp đỡ điều này đang khiến tôi phát điên! [và tôi muốn công khai trang web này ngày hôm nay]

BIÊN TẬP

Tôi cũng nên đề cập rằng tôi đã thấy lỗi này trên một số nhưng không phải tất cả các cài đặt wordpress khác trên máy chủ này. Tôi nghĩ nhưng không thể chắc chắn 100%, rằng những lỗi hiển thị là cài đặt mới hơn những lỗi hoạt động tốt. Mặc dù tất cả các cài đặt được cập nhật đầy đủ.

EDIT2

Tôi chỉ đang làm việc trên một dự án WP khác và nhận ra ít nhất 3 lỗi đó có nghĩa gì. Tôi có thể sao chép chính xác ba lỗi php đó bằng cách truy cập trang chỉ mục của loại bài đăng tùy chỉnh không tồn tại. Tuy nhiên, điều này không giải thích lý do tại sao điều đó sẽ gây ra 404 trong câu hỏi này, đặc biệt là vì nó không chỉ xảy ra trên các trang chỉ mục loại bài đăng tùy chỉnh. Tuy nhiên tôi nghĩ rằng điều này phải liên quan đến các loại bài tùy chỉnh theo một cách nào đó.


Sidewide có nghĩa là trên tất cả các trang / bài đăng / danh mục nhưng không có trong wp-admin, vậy về cơ bản có trang nào không? ps: vô hiệu hóa plugin W3TC không loại bỏ tất cả chức năng lưu trữ ngay lập tức. Cách tốt hơn là vô hiệu hóa bộ đệm ẩn trên trang tùy chọn chính của plugin và điều này thực sự nghe giống như vấn đề cấu hình bộ đệm / bộ đệm.
s1lv3r

Có bên có nghĩa là bất kỳ trang frontend nhưng không có gì trong wp-admin. Tôi không nghĩ nó có thể có bất cứ điều gì liên quan đến plugin W3 Cache vì thỉnh thoảng tôi gặp vấn đề này trong quá trình phát triển.
iiz

2
Có phải đó là ba thông báo duy nhất? Linh cảm của tôi là cơ sở dữ liệu của bạn bị loại bỏ, nhưng điều đó thường sẽ kích hoạt thông báo của chính nó.
Matthew Boynes

Tôi chỉ nhận được ba thông báo chính xác khi lỗi này xảy ra. Nó xảy ra giữa 2-3 lần một giờ và tôi không thể thấy mô hình nào trong thời gian của nó. Nó có thể xảy ra khi cố gắng truy cập bất kỳ trang nào không chỉ ở nhà / kho lưu trữ. Mức loggin PHP được đặt thành 32767 [E_ALL]. Tôi nghĩ rằng trước đây tôi đã thử WP_DEBUG và không thấy gì nhưng không thể chắc chắn. Bây giờ trang web trong câu hỏi là trực tiếp [! không có lựa chọn về điều này]. Nhưng tôi có thể thực hiện một cài đặt ẩn khác với các tham số tương tự như thế này nếu bạn nghĩ rằng nó sẽ có giá trị.
iiz

1
Bạn có thể xem nhật ký truy cập cùng lúc để tìm hiểu yêu cầu nào đang kích hoạt nó không?
jezmck

Câu trả lời:


1

Có hai loại lỗi 404: do WordPress tạo và máy chủ tạo.

Trong một số môi trường máy chủ, máy chủ 404 có thể được máy chủ hiển thị không chính xác trong trường hợp quá tải CPU hoặc do một số trường hợp cấu hình sai, v.v. Thông thường, các lỗi 404 do máy chủ tạo ra sẽ có nội dung như "Nginx" hoặc "Apache" ở cuối trang (tùy thuộc vào loại máy chủ).

Trong các tình huống khác, lỗi 404 "dương tính giả" có thể được tạo bởi WordPress (PHP) vì các plugin bảo mật đang chặn quyền truy cập vào các tài nguyên được tải:

Tại sao đôi khi tôi gặp lỗi 404 khi tôi cố cập nhật trang bằng Elementor?

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

Hãy thử vô hiệu hóa mọi plugin bảo mật, xóa bộ nhớ cache và làm mới trang. Các mô-đun bảo mật như ModSecurity được cài đặt trên máy chủ của bạn cũng có khả năng là nguyên nhân.

Nó cũng có thể được gây ra bởi một chủ đề hoặc plugin được mã hóa kém. Kiểm tra xem có một chủ đề chung hoặc plugin được cài đặt trên tất cả các trang web liên quan. Và nếu sự cố này chỉ xảy ra trên dịch vụ lưu trữ Media Temple, thì có thể họ đã bị cấu hình sai hoặc thậm chí máy chủ của bạn đang tải quá nhiều ...


0

Bạn không có đủ thông tin để giải quyết vấn đề của bạn. Cố gắng thêm dấu vết ngăn xếp đầy đủ và yêu cầu thông tin vào nhật ký lỗi của bạn để điều tra một vấn đề.

Bạn có thể tạo trình xử lý lỗi tùy chỉnh của riêng mình để thêm dấu vết ngăn xếp và yêu cầu thông tin vào nhật ký lỗi của bạn.

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

Bạn có thể kiểm tra xem điều này có hoạt động hay không bằng cách thêm trigger_error ở đâu đó trong mã của bạn, ví dụ như trong single.phptệp.

trigger_error('Annoying notice');

Nhật ký lỗi của bạn sẽ xuất ra một cái gì đó như thế:

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"

Với loại tin nhắn này sẽ dễ dàng hơn nhiều để tìm ra vấn đề ở đâu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.