Hôm nay tôi đã nâng cấp máy chủ web của mình từ Debian Buster lên Bullseye và thực tế đây là một bản nâng cấp khá đơn giản. Mọi thứ dường như hoạt động cho đến khi tôi cố gắng truy cập một vài trang web WordPress trên máy chủ. Lúc đầu, tôi gặp một số lỗi về thiếu mô-đun MySQL. Thông báo lỗi tôi nhận được từ PHPMyAdmin đã cho tôi manh mối tốt hơn: thông báo cho biết nó thiếu mô-đun mysqli.
Vì vậy, tôi đã cài đặt nó với apt cài đặt php7.4-mysqli
và điều đó trên thực tế đã làm cho các trang web WordPress của tôi hoạt động trở lại.
Tuy nhiên, vấn đề duy nhất bây giờ là tôi không thể cập nhật Wordpress. Mỗi khi tôi cố cập nhật WordPress, tôi lại gặp lỗi:
Tôi nghi ngờ rằng tôi cần cài đặt suphp. Nhưng trước khi tôi làm, có ai có thể xác nhận đây thực sự là trường hợp không? Hay tôi cần làm gì khác sau khi nâng cấp từ Buster lên Bullseye?
CHỈNH SỬA:
Tôi mất khá nhiều thời gian để tìm hiểu chuyện gì đang thực sự xảy ra. Bây giờ tôi biết, tôi không biết làm thế nào để giải quyết vấn đề.
Thông báo lỗi mà WP đưa ra thực sự không chính xác. Hóa ra, nó Là có thể giải nén bản cập nhật tốt trong thư mục thích hợp. Nhưng đó là khi nó kiểm tra xem các tệp đã thực sự được giải nén hay chưa, nó sẽ sai ở đâu. Vấn đề nằm ở đoạn mã này trong cập nhật-core.php:
foreach ( $root là $root ) {
nếu ( $wp_filesystem->exists( $from . $root . 'readme.html' )
&& $wp_filesystem->exists( $from . $root . 'wp-includes/version.php' )
) {
$distro = $root;
nghỉ;
}
}
nếu ( ! $distro ) {
$wp_filesystem->delete( $from, true );
return new WP_Error( 'insane_distro', __( 'Không thể giải nén bản cập nhật.' ) );
}
Những gì nó làm ở đây, chỉ đơn giản là kiểm tra xem có tồn tại hai tệp trong thư mục mà nó vừa giải nén tệp zip hay không. Điều này không thành công. Và lý do như sau:
Tôi sử dụng phương pháp FTP để cài đặt các bản cập nhật. Vì vậy, khi tôi bảo nó cập nhật, trước tiên nó sẽ tìm ra thư mục mà nó sẽ tải tệp zip xuống. Thư mục này được lưu trữ trong $working_dir và được sử dụng kể từ thời điểm đó cho phần còn lại của quá trình cập nhật.Đường dẫn thực sự trên máy chủ là /domains/domainname.com/htdocs/wp-content/upgrade/
nhưng vì người dùng FTP được chroot, WP tìm và lưu trữ /htdocs/wp-content/nâng cấp/
thay thế. Tệp cập nhật được tải xuống thư mục này và sau đó được giải nén.
Tiếp theo nó thực hiện việc kiểm tra trên. Và điều đó không thành công vì nó cố tìm một tệp trong /htdocs/wp-content/nâng cấp/
trong khi vị trí thực sự là /domains/domainname.com/htdocs/wp-content/upgrade/
.
Tôi hiểu tại sao nó tải xuống gói tốt (vì người dùng FTP đã được chroot). Nhưng tôi không hiểu tại sao nó không giải nén được sau đó nhưng lại không thành công khi kiểm tra sự tồn tại của các tệp...
Tôi đã kiểm tra tất cả các cài đặt php và không thể tìm thấy bất cứ điều gì khác với các cài đặt từ trước khi nâng cấp Debian...