Score:0

หลังจากอัปเกรด Debian Buster เป็น Bullseye แล้ว ไซต์ Wordpress จะไม่อัปเดตอีกต่อไป

ธง cn

วันนี้ฉันอัปเกรดเว็บเซิร์ฟเวอร์จาก Debian Buster เป็น Bullseye และอันที่จริงแล้วเป็นการอัปเกรดที่ค่อนข้างตรงไปตรงมา ทุกอย่างดูเหมือนจะใช้งานได้จนกระทั่งฉันพยายามเข้าถึงไซต์ WordPress สองสามแห่งบนเซิร์ฟเวอร์ ตอนแรกฉันพบข้อผิดพลาดเกี่ยวกับโมดูล MySQL ที่ขาดหายไป ข้อความแสดงข้อผิดพลาดที่ฉันได้รับจาก PHPMyAdmin ทำให้ฉันทราบเบาะแสที่ดีกว่า: มันบอกว่าไม่มีโมดูล mysqli

ดังนั้นฉันจึงติดตั้งด้วย ฉลาดในการติดตั้ง php7.4-mysqli และนั่นทำให้ไซต์ WordPress ของฉันกลับมาใช้งานได้อีกครั้ง

ปัญหาเดียวในตอนนี้คือฉันไม่สามารถอัปเดต Wordpress ได้ ทุกครั้งที่ฉันพยายามอัปเดต WordPress ฉันได้รับข้อผิดพลาด:

ข้อผิดพลาดในการอัปเดต WordPress

ฉันสงสัยว่าฉันต้องติดตั้ง suphp แต่ก่อนที่ฉันจะทำ มีใครสามารถยืนยันได้ว่านี่เป็นกรณีจริงหรือไม่? หรือฉันต้องทำอย่างอื่นหลังจากอัพเกรดจาก Buster เป็น Bullseye?

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

ข้อความแสดงข้อผิดพลาดที่ WP ให้นั้นไม่ถูกต้องจริงๆ ปรากฎว่ามัน เป็น สามารถแกะการอัปเดตได้ดีในโฟลเดอร์ที่เหมาะสม แต่เป็นการตรวจสอบว่าไฟล์มีการแตกไฟล์จริงหรือไม่ ผิดพลาดตรงไหน ปัญหาอยู่ที่โค้ดส่วนนี้ใน อัพเดท-core.php:

foreach ( $root เป็น $root ) {
  ถ้า ( $wp_filesystem->exists( $from . $root . 'readme.html' )
    && $wp_filesystem->exists( $from . $root . 'wp-includes/version.php' )
  ) {
    $distro = $รูท;
    หยุดพัก;
  }
}
    
ถ้า ( ! $ distro ) {
  $wp_filesystem->delete( $จาก, จริง );
  ส่งคืน WP_Error ใหม่ ( 'insane_distro', __ ( 'ไม่สามารถแกะการอัปเดตได้' ) );
}

สิ่งที่ทำที่นี่ก็แค่ตรวจสอบว่ามีไฟล์สองไฟล์อยู่ในโฟลเดอร์ที่เพิ่งแตกไฟล์ zip ไปหรือไม่ สิ่งนี้ล้มเหลว และเหตุผลมีดังนี้:

ฉันใช้วิธี FTP เพื่อติดตั้งการอัปเดต ดังนั้นเมื่อฉันบอกให้อัปเดต ก่อนอื่นก็จะหาโฟลเดอร์ที่ควรดาวน์โหลดไฟล์ zip ไปที่ โฟลเดอร์นี้ถูกเก็บไว้ใน $working_dir และใช้ตั้งแต่นั้นเป็นต้นมาสำหรับกระบวนการอัปเดตที่เหลือเส้นทางที่แท้จริงบนเซิร์ฟเวอร์คือ /domains/domainname.com/htdocs/wp-content/upgrade/ แต่เนื่องจากผู้ใช้ FTP ถูก chrooted WP จึงค้นหาและจัดเก็บ /htdocs/wp-content/upgrade/ แทน. ไฟล์อัพเดตจะถูกดาวน์โหลดไปยังโฟลเดอร์นี้และคลายแพ็ก

ถัดไปจะทำการตรวจสอบข้างต้น และนั่นล้มเหลวเพราะพยายามค้นหาไฟล์ใน /htdocs/wp-content/upgrade/ ในขณะที่สถานที่ที่แท้จริงนั้น /domains/domainname.com/htdocs/wp-content/upgrade/.

ฉันเข้าใจว่าทำไมมันถึงดาวน์โหลดแพ็คเกจได้ดี (เนื่องจากผู้ใช้ FTP ถูก chrooted) แต่ฉันไม่เข้าใจว่าทำไมมันถึงไม่ล้มเหลวในการแกะกล่องในภายหลัง แต่ล้มเหลวเมื่อตรวจสอบการมีอยู่ของไฟล์...

ฉันตรวจสอบการตั้งค่า php ทั้งหมดแล้วและไม่พบสิ่งใดแตกต่างจากการตั้งค่าก่อนหน้าการอัปเกรด Debian

Zippy1970 avatar
cn flag
แค่อยากจะบอกว่า suphp **ไม่ได้** ติดตั้งใน Buster นอกจากนี้ ฉันเพิ่งสังเกตเห็นว่าการอัปเดตปลั๊กอินใช้งานได้ แต่หลังจากที่ฉันอัปเดตปลั๊กอิน ไซต์ WordPress ของฉันยังคงอยู่ในโหมดการบำรุงรักษา (หมายความว่าเว็บไซต์สร้างไฟล์ .maintenance แต่ไม่ได้ลบออก)...
Score:0
ธง cn

ฉันใช้เวลาสักครู่เพื่อหาว่าเกิดอะไรขึ้น แต่จริงๆ แล้วเป็นปัญหากับ WordPress Bullseye ติดตั้ง PureFTPd เวอร์ชัน 1.0.49 ที่ติดตั้งใน Buster v1.0.47 ตามบันทึกการเปลี่ยนแปลงของ PureFTPd ที่นี่การกลมถูกลบออกจากคำสั่ง NLST ใน v1.0.48 (ซึ่งสมเหตุสมผลเนื่องจากไม่ได้รับอนุญาตตาม RFC)

นักพัฒนา WordPress ทราบถึงปัญหาและได้แก้ไขฟังก์ชันที่มีอยู่แล้ว ()แพทช์สามารถใช้ได้ ที่นี่; การใช้งานเป็นหนึ่งในสองวิธีในการอัปเกรด WordPress หากคุณใช้ PureFTPd เวอร์ชัน 1.0.48 ขึ้นไป และติดอยู่กับการอัปเกรดผ่าน FTP

คุณยังสามารถแทนที่ฟังก์ชันได้ด้วยตัวคุณเอง /wp-admin/includes/class-wp-filesystem-ftpext.php (หรือ /wp-admin/includes/class-wp-filesystem-ftpsockets.php หากคุณใช้ FTPSockets) ด้วยสิ่งต่อไปนี้ (ซึ่งเป็นการใช้งานฟังก์ชั่นของฉันเอง):


        มีฟังก์ชั่นสาธารณะ ( $file ) {
          $retval = เท็จ;

          $list = ftp_nlist( $this->link, $file );
          ถ้า( ! ว่าง( $list ) ) {
            // ถ้า ftp_nlist ส่งกลับ *something* แสดงว่ามีไฟล์หรือไดเร็กทอรีอยู่ในเซิร์ฟเวอร์ FTP ใดๆ
            $retval = จริง;
          } อื่น {
            // ถ้า ftp_nlist ไม่คืนค่าใดๆ แสดงว่าไม่มีไฟล์/dir หรือเป็นไฟล์ และ
            // คำสั่ง NLST ของเซิร์ฟเวอร์ FTP ไม่รองรับ globbing (เช่น Pure-FTPD > v1.0.47)
            // ตรวจสอบว่าเป็นไฟล์หรือไม่
            ถ้า( ftp_size( $this->link, $file ) >= 0 ) {
              $retval = จริง;
            }
          }
          ส่งคืน $retval;

        }

WordPress 6.0 จะมีฟังก์ชันใหม่เป็นค่าเริ่มต้น

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา