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