AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1094992
Accepted
Zippy1970
Zippy1970
Asked: 2022-03-01 09:01:10 +0800 CST2022-03-01 09:01:10 +0800 CST 2022-03-01 09:01:10 +0800 CST

将 Debian Buster 升级到 Bullseye 后,Wordpress 站点不再更新

  • 772

今天我将我的网络服务器从 Debian Buster 升级到 Bullseye,这实际上是一个非常简单的升级。在我尝试访问服务器上的几个 WordPress 站点之前,一切似乎都正常。起初我收到一些关于缺少 MySQL 模块的错误。我从 PHPMyAdmin 收到的错误消息给了我一个更好的线索:它说它缺少 mysqli 模块。

所以我安装了它, apt install php7.4-mysqli 这实际上让我的 WordPress 网站再次运行。

然而,现在唯一的问题是我无法更新 Wordpress。每次我尝试更新 WordPress 时,都会出现错误:

WordPress 更新错误

我怀疑我需要安装suphp。但在我这样做之前,任何人都可以确认情况确实如此吗?还是在从 Buster 升级到 Bullseye 后我需要做其他事情?

编辑: 我花了很长时间才弄清楚到底发生了什么。现在我知道了,我不知道如何解决这个问题。

WP给出的错误消息实际上是不正确的。事实证明,它能够在正确的文件夹中很好地解压缩更新。但是当它检查文件是否真正解包时,它会出错。问题在于update-core.php中的这段代码:

foreach ( $roots as $root ) {
  if ( $wp_filesystem->exists( $from . $root . 'readme.html' )
    && $wp_filesystem->exists( $from . $root . 'wp-includes/version.php' )
  ) {
    $distro = $root;
    break;
  }
}
    
if ( ! $distro ) {
  $wp_filesystem->delete( $from, true );
  return new WP_Error( 'insane_distro', __( 'The update could not be unpacked.' ) );
}

它在这里所做的只是检查它刚刚将 zip 文件解压缩到的文件夹中是否存在两个文件。这失败了。原因如下:

我使用 FTP 方法安装更新。因此,当我告诉它更新时,它首先会确定应该将 zipfile 下载到的文件夹。此文件夹存储在$working_dir中,并从那时起用于其余的更新过程。服务器上的真实路径是,/domains/domainname.com/htdocs/wp-content/upgrade/但是由于 FTP 用户是 chroot 的,WP 会查找并存储/htdocs/wp-content/upgrade/。更新文件下载到此文件夹,然后解压缩。

接下来它会进行上述检查。这失败了,因为它试图在/htdocs/wp-content/upgrade/真实位置为/domains/domainname.com/htdocs/wp-content/upgrade/.

我理解为什么它可以很好地下载软件包(因为 FTP 用户是 chroot 的)。但我不明白为什么它在解压之后没有失败,但是在检查文件是否存在时它确实失败了......

我检查了所有 php 设置,并没有发现与 Debian 升级之前的设置有什么不同……

wordpress php7 debian-bullseye
  • 1 1 个回答
  • 145 Views

1 个回答

  • Voted
  1. Best Answer
    Zippy1970
    2022-03-09T00:32:28+08:002022-03-09T00:32:28+08:00

    我花了一段时间才弄清楚到底发生了什么,但这实际上是 WordPress 的问题。Bullseye 在安装了 Buster v1.0.47 的地方安装了 PureFTPd 1.0.49 版。根据此处PureFTPd 的变更日志,通配符已从 v1.0.48 中的 NLST 命令中删除(这是有道理的,因为根据 RFC 实际上是不允许的)。

    WordPress 开发人员已经意识到了这个问题并修补了 exists() 函数。该补丁可在此处获得;如果您使用 PureFTPd 版本 1.0.48 或更高版本并且无法通过 FTP 升级,则应用它是升级 WordPress 的两种方法之一。

    您也可以自己在/wp-admin/includes/class-wp-filesystem-ftpext.php(或/wp-admin/includes/class-wp-filesystem-ftpsockets.php如果您使用 FTPSockets)中替换函数以下(这实际上是我自己的功能实现):

    
            public function exists( $file ) {
              $retval = false;
    
              $list = ftp_nlist( $this->link, $file );
              if( ! empty( $list ) ) {
                // if ftp_nlist returns *something*, the file or directory exists, on any FTP server
                $retval = true;
              } else {
                // if ftp_nlist returns nothing, either the file/dir doesn't exist or it's a file and
                // the FTP server's NLST command doesn't support globbing (i.e. Pure-FTPD > v1.0.47)
                // Check if it'a file
                if( ftp_size( $this->link, $file ) >= 0 ) {
                  $retval = true;
                }
              }
              return $retval;
    
            }
    

    WordPress 6.0 默认会有这个新功能。

    • 0

相关问题

  • 在 Ubuntu 上安装 Wordpress 插件/Pear 问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve