我刚刚将一个网站升级到WordPress版本4.4,现在每当我尝试升级任何插件或主题时,都会收到如下消息:
An error occurred while updating <plugin/theme name>: Could not create directory. <plugin/theme directory>
我已经在
wp-content
目录(甚至所有子目录)到777,但每当我尝试升级插件或主题时,仍然会收到上面的消息。
有什么好处?
我am 能够安装新插件,因此在插件文件夹中似乎没有权限问题。
更多研究:
在里面wp-admin/includes/class-wp-uploader.php
, 第531-535行:
//Create destination if needed
if ( ! $wp_filesystem->exists( $remote_destination ) ) {
if ( ! $wp_filesystem->mkdir( $remote_destination, FS_CHMOD_DIR ) ) {
return new WP_Error( \'mkdir_failed_destination\', $this->strings[\'mkdir_failed\'], $remote_destination );
}
}
当我尝试更新插件时,exists调用返回false。这是错误的。我可以看到
$remote_destination
在我的OS shell中,它显然确实存在,因为mkdir调用失败,它无法生成目录,因为它已经存在。
深入挖掘,在wp-admin/includes/class-wp-filesystem-ftpext.php
, 第329-338行:
public function exists( $file ) {
$path = dirname( $file );
$filename = basename( $file );
$file_list = @ftp_nlist( $this->link, \'-a \' . $path );
if ( $file_list ) {
$file_list = array_map( \'basename\', $file_list );
}
return $file_list && in_array( $filename, $file_list );
}
如果我在return语句之前添加以下行。。。
error_log(debug_backtrace()[1][\'function\'] . ": \\npath: $path\\nfilename: $filename\\nfile list:\\n" . print_r($file_list, true) . "\\n");
。。。我看到相关调用的输出。。。
[11-Dec-2015 18:42:19 UTC] install_package:
path: <the expected path>
filename: <the expected filename>
file list:
Array
(
)
文件列表为空!不应该这样。这是怎么回事?