404s ชั่วคราวที่ไม่สอดคล้องกันในการติดตั้งทั้งหมด | ข้อผิดพลาดของ PHP กับ post-template.php


9

ฉันสับสนอย่างมากกับสิ่งนี้: ฉันมีการติดตั้ง WordPress บน Media Temple GS [หนึ่งในหลาย ๆ ตัวที่ทำงานได้ดีและมีการกำหนดค่าเกือบจะเหมือนกัน] ซึ่งบางครั้งทำให้ฉันนั่ง 404 วินาที เมื่อสิ่งนี้เกิดขึ้นฉันได้รับข้อผิดพลาด 3 ข้อพร้อมกันในบันทึกข้อผิดพลาด 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

สองคนแรกเกี่ยวข้องกับ$postวัตถุ & สิ่งที่สาม: get_post()->ID;สิ่งที่ฉันคิดว่าเป็นการสร้าง$postวัตถุ

ฉันมีข้อความข้อผิดพลาดสามแบบที่เหมือนกันเหล่านี้แยกกันเกือบ 25 นาที [off by 2s]

ฉันลองใช้การสนับสนุน MT แต่พวกเขาคิดว่าต้องเป็นข้อผิดพลาด WP ฉันใช้ WP รุ่นล่าสุด แต่ได้ประสบปัญหานี้กับรุ่นก่อนหน้า

ฉันเปิดใช้งานปลั๊กอิน 2 อัน: W3 Total Cache & AJAX Thumbnail Rebuild

ฉันทดสอบด้วยและไม่มีปลั๊กอินแคชและปัญหายังคงอยู่ ฉันเพิ่งปิดใช้งานปลั๊กอินภาพขนาดย่อเพื่อดูว่ามีความแตกต่างหรือไม่

โปรดช่วยสิ่งนี้ทำให้ฉันเป็นบ้า! [และฉันต้องการที่จะเปิดตัวเว็บไซต์นี้ในวันนี้]

แก้ไข

ฉันควรจะกล่าวด้วยว่าฉันได้เห็นข้อผิดพลาดนี้ในบางส่วน แต่ไม่ทั้งหมดของ WordPress ติดตั้งบนเซิร์ฟเวอร์นี้ ฉันคิดว่า แต่ไม่สามารถแน่ใจได้ 100% ว่าข้อผิดพลาดที่แสดงเป็นการติดตั้งใหม่กว่าที่ทำงานได้ดี แม้ว่าการติดตั้งทั้งหมดจะได้รับการอัพเดตอย่างสมบูรณ์

EDIT2

ฉันแค่ทำงานในโครงการ WP อีกโครงการและรับรู้อย่างน้อยความผิดพลาดทั้งสามข้อนั้น ฉันสามารถทำซ้ำข้อผิดพลาด php ทั้งสามนั้นโดยไปที่หน้าดัชนีของประเภทโพสต์ที่กำหนดเองที่ไม่มีอยู่ อย่างไรก็ตามสิ่งนี้ไม่ได้อธิบายว่าทำไมสิ่งนี้จึงทำให้ 404 ในคำถามนี้โดยเฉพาะอย่างยิ่งมันไม่ได้เกิดขึ้นเฉพาะในหน้าดัชนีประเภทโพสต์ที่กำหนดเอง อย่างไรก็ตามฉันคิดว่าสิ่งนี้ต้องเกี่ยวข้องกับประเภทโพสต์ที่กำหนดเองไม่ทางใดก็ทางหนึ่ง


ด้านข้างมีความหมายในทุกหน้า / โพสต์ / หมวดหมู่ แต่ไม่ได้อยู่ใน wp-admin ดังนั้นโดยทั่วไปหน้าส่วนหน้า? ps: การปิดใช้งานปลั๊กอิน W3TC ไม่ได้ลบฟังก์ชั่นการแคชทั้งหมดทันที วิธีที่ดีกว่าคือการปิดใช้งานการแคชในหน้าตัวเลือกหลักของปลั๊กอินและสิ่งนี้ฟังดูคล้ายกับปัญหาการกำหนดค่าแคช / แคช
s1lv3r

ใช่ด้านข้างหมายถึงหน้าส่วนหน้า แต่ไม่มีอะไรใน wp-admin ฉันไม่คิดว่ามันจะมีอะไรเกี่ยวข้องกับปลั๊กอิน W3 Cache เพราะฉันมีปัญหานี้ในการพัฒนาเป็นครั้งคราวก่อนที่จะเปิดใช้งาน
iiz

2
นี่เป็นเพียงประกาศสามข้อ? ลางสังหรณ์ของฉันคือฐานข้อมูลของคุณหลุดออกไป
Matthew Boynes

ฉันได้รับแจ้งทั้งสามนี้เท่านั้นเมื่อเกิดข้อผิดพลาดนี้ขึ้น มันเกิดขึ้นระหว่าง 2-3 ครั้งต่อชั่วโมงและฉันไม่เห็นรูปแบบเวลา มันสามารถเกิดขึ้นได้เมื่อพยายามเข้าถึงหน้าใด ๆ ไม่ใช่แค่ที่บ้าน / ที่เก็บถาวร ระดับของการล็อกอิน PHP ถูกตั้งค่าเป็น 32767 [E_ALL] ฉันคิดว่าฉันเคยลอง WP_DEBUG และไม่เห็นอะไรเลย แต่ไม่แน่ใจ ตอนนี้ไซต์ที่เป็นปัญหาอยู่ [! ไม่มีตัวเลือกสำหรับสิ่งนี้] แต่ฉันสามารถทำการติดตั้งอื่นที่ซ่อนอยู่ด้วยพารามิเตอร์เดียวกันเช่นนี้ถ้าคุณคิดว่ามันจะคุ้มค่า
iiz

1
คุณสามารถดูบันทึกการเข้าถึงในเวลาเดียวกันเพื่อค้นหาว่าคำขอใดเรียกใช้หรือไม่
jezmck

คำตอบ:


1

ข้อผิดพลาด 404 มีสองประเภท: สร้างโดย WordPress และสร้างจากเซิร์ฟเวอร์

ในบางสภาพแวดล้อมเซิร์ฟเวอร์ 404s อาจแสดงอย่างไม่ถูกต้องโดยเซิร์ฟเวอร์ในกรณีที่ CPU ทำงานหนักเกินไปหรือเนื่องจากบางกรณีของการกำหนดค่าผิดพลาดเป็นต้นโดยปกติแล้วข้อผิดพลาด 404 ที่เซิร์ฟเวอร์สร้างขึ้นจะพูดว่า "Nginx" หรือ "Apache" ที่ด้านล่างของ หน้า (ขึ้นอยู่กับประเภทเซิร์ฟเวอร์)

ในสถานการณ์อื่น ๆ ข้อผิดพลาด 404 อาจเกิดจาก "false positive" WordPress (PHP) เนื่องจากปลั๊กอินความปลอดภัยกำลังบล็อกการเข้าถึงทรัพยากรที่โหลด:

เหตุใดฉันจึงได้รับข้อผิดพลาด 404 เมื่อฉันพยายามอัปเดตหน้าเว็บด้วย Elementor

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

คุณสามารถตรวจสอบว่ามันใช้งานได้หรือไม่โดยการเพิ่ม trigger_error ไว้ในรหัสของคุณเช่นในsingle.phpไฟล์

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.