我正在将现有的WordPress网站迁移到新硬件,到目前为止,该网站已启动并且(大部分)正在运行。
尝试插件升级后,我发现WordPress打开的用于推送插件和其他升级的FTP会话似乎在尝试更改文件之前忽略了UPLOAD命令。如果为不存在的文件点击CHMOD,升级将失败。
先前的系统是在Ubuntu 12.04下运行的PHP 5.3。新系统是在Ubuntu 18.04下运行的PHP 7.2。
这似乎不是权限问题。我使用外部客户端将文件上传到相关目录没有问题,并且我怀疑WordPress如果尝试进行上传,便能够成功上传。当我临时向WordPress工作目录上的所有用户开放权限时,我也看到了忽略UPLOAD的相同行为。
这里是两个FTP日志的比较(在两种情况下都使用vsftpd):
确定案例(现有系统):
Mon Jul 16 20:51:43 2018 [pid 3] [username] OK MKDIR: Client "<ipAddress>", "./wp-content/upgrade/so-widgets-bundle.1.12.0-wtpjm3/so-widgets-bundle/admin"
Mon Jul 16 20:51:43 2018 [pid 3] [username] OK CHMOD: Client "<ipAddress>", "./wp-content/upgrade/so-widgets-bundle.1.12.0-wtpjm3/so-widgets-bundle/admin 775"
Mon Jul 16 20:51:44 2018 [pid 3] [username] OK UPLOAD: Client "<ipAddress>", "./wp-content/upgrade/so-widgets-bundle.1.12.0-wtpjm3/so-widgets-bundle/admin/admin.css", 11907 bytes, 584.82Kbyte/sec
Mon Jul 16 20:51:44 2018 [pid 3] [username] OK CHMOD: Client "<ipAddress>", "./wp-content/upgrade/so-widgets-bundle.1.12.0-wtpjm3/so-widgets-bundle/admin/admin.css 664"
失败案例(新系统)
Mon Jul 16 21:50:51 2018 [pid 17045] [username] OK MKDIR: Client "<ipAddress>", "./wp-content/upgrade/so-widgets-bundle.1.12.0-bYpnl8/so-widgets-bundle/admin"
Mon Jul 16 21:50:51 2018 [pid 17045] [username] OK CHMOD: Client "<ipAddress>", "./wp-content/upgrade/so-widgets-bundle.1.12.0-bYpnl8/so-widgets-bundle/admin 775"
Mon Jul 16 21:50:54 2018 [pid 17045] [username] FAIL CHMOD: Client "<ipAddress>", "./wp-content/upgrade/so-widgets-bundle.1.12.0-bYpnl8/so-widgets-bundle/admin/admin.css 664"
CHMOD似乎失败,因为该目录中没有刚刚创建的admin.css
文件。
尝试
WordPress为我玩过的FS_METHOD
定义了一个。根据{{3}},如果未指定任何方法,除非脚本确定存在安全问题,否则它将尝试使用direct
。如果有孔,它将尝试使用ftpext
。由于我了解这是操作系统使用的模式,因此我尝试设置以下内容:
define( 'FS_METHOD', `ftpext` );
此(ftpext
)不会改变使我感到惊讶的行为。尚不清楚1)该算法没有发现什么内容可以告诉新安装避免使用direct
,因此2)无论如何它都试图使用失败的ftpext
。
同样,这似乎是旧安装所做的,因为我确实在两个系统上的FTP日志中都看到了活动。
在设置SSH之前,我不希望ssh2
模式能正常工作(也许我会尝试设置它)。尚未尝试过ftpsockets
,但是我想这是第四种选择的原因。
任何见识甚至是对大脑的欢迎都将受到欢迎。