Điểm:0

Sau khi nâng cấp Debian Buster lên Bullseye, các trang Wordpress không còn cập nhật

lá cờ cn

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:

Lỗi cập nhật WordPress

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ó 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...

Zippy1970 avatar
lá cờ cn
Chỉ muốn thêm rằng suphp đã **không** được cài đặt trong Buster. Ngoài ra, tôi vừa nhận thấy rằng việc cập nhật plugin vẫn hoạt động, nhưng sau khi tôi cập nhật plugin, trang web WordPress của tôi vẫn ở chế độ bảo trì (có nghĩa là nó đã tạo tệp .maintenance nhưng không xóa tệp đó)...
Điểm:0
lá cờ cn

Tôi đã mất một lúc để tìm ra chính xác điều gì đang xảy ra nhưng đó thực sự là một vấn đề với WordPress. Bullseye cài đặt phiên bản 1.0.49 của PureFTPd trong Buster v1.0.47 đã được cài đặt. Theo nhật ký thay đổi của PureFTPd đây, tính năng tạo khối cầu đã bị xóa khỏi lệnh NLST trong v1.0.48 (điều này hợp lý vì nó thực sự không được phép theo RFC).

Các nhà phát triển WordPress nhận thức được vấn đề và đã vá lỗi tồn tại() chức năng.Bản vá có sẵn đây; áp dụng nó là một trong hai cách để nâng cấp WordPress nếu bạn đang sử dụng PureFTPd phiên bản 1.0.48 trở lên và gặp khó khăn với việc nâng cấp qua FTP.

Bạn cũng có thể tự thay thế chức năng trong /wp-admin/includes/class-wp-filesystem-ftpext.php (hoặc /wp-admin/includes/class-wp-filesystem-ftpsockets.php nếu bạn đang sử dụng FTPSockets) bằng cách sau (đây thực sự là cách triển khai chức năng của riêng tôi):


        chức năng công cộng tồn tại( $file ) {
          $retval = sai;

          $list = ftp_nlist( $this->link, $file );
          nếu( ! trống( $list ) ) {
            // nếu ftp_nlist trả về *something*, tệp hoặc thư mục tồn tại trên bất kỳ máy chủ FTP nào
            $retval = true;
          } khác {
            // nếu ftp_nlist không trả về gì, thì tệp/thư mục không tồn tại hoặc đó là một tệp và
            // lệnh NLST của máy chủ FTP không hỗ trợ toàn cầu hóa (tức là Pure-FTPD > v1.0.47)
            // Kiểm tra xem nó có phải là file không
            if( ftp_size( $this->link, $file ) >= 0 ) {
              $retval = true;
            }
          }
          trả về $retval;

        }

WordPress 6.0 sẽ có chức năng mới theo mặc định.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.