为什么unzip_file总是返回TRUE,但什么都没有发生?

时间:2016-05-13 作者:phpheini

我正在尝试使用WordPress的$wp\\u文件系统解压位于wp-content/plugins 并将其放置在同一位置。不管我怎么尝试WordPress方法unzip_file() 始终返回true,就像它工作一样(但服务器上没有出现文件)。

这是我用来解压缩文件的代码:

WP_Filesystem();
$zip_from = get_home_path().\'wp-content/plugins/\'.$filename;
$zip_to = str_replace(ABSPATH, $wp_filesystem->abspath(), get_home_path().\'wp-content/plugins/\');
if(!unzip_file($zip_from,$zip_to))
{
    return new \\WP_Error(\'writing_error\', \'Couldn\\\'t extract the plugin\\\'s ZIP file.\');
}
else exit("worked");
于是我跳进了unzip_file() 方法位于WordPress\'file.php 文件,并发现脚本停止在以下位置:

// Create those directories if need be:
foreach ( $needed_dirs as $_dir )
{
    // Only check to see if the Dir exists upon creation failure. Less I/O this way.
    if ( ! $wp_filesystem->mkdir( $_dir, FS_CHMOD_DIR ) && ! $wp_filesystem->is_dir( $_dir ) ) {
        // THIS IS WHERE THE SCRIPT STOPS       
        return new WP_Error( \'mkdir_failed_ziparchive\', __( \'Could not create directory.\' ), substr( $_dir, strlen( $to ) ) );
    }
}
当我检查时var_dump($_dir) 它回来了/www, 所以$wp_filesystem->is_dir(\'/www\') 返回false。这种行为的原因可能是什么,路径似乎是正确的,它是文档中所述的完整路径。

PS:即使是官方文件中所述的最基本的例子unzip_file() (https://codex.wordpress.org/Function_Reference/unzip_file#Example) 不起作用(我收到一条成功消息,但没有创建文件)。

1 个回复
SO网友:Mark Kaplun

在PHP中,在太多的上下文中,false和true更像是一种思维状态,而不是实际值和not false 不同于true 如果要检查某个对象是否为布尔值true, 那就检查一下=== true.

在您的情况下,函数返回WP_Error 对象,它根本不是布尔值,并且可能包含失败的原因。

至于失败的实际原因,这意味着您没有权限写入要写入的位置。

相关推荐

致命错误:找不到类‘ZipArchive’

导致此错误的原因:致命错误:在/home/test/dummyurl中找不到类“ZipArchive”。com/wp-content/themes/mytheme/upload-zip。php在线14PHP版本为5.3.1WP是否有我应该使用的内置功能?例如的“unzip\\u file”功能行525/wp管理/包括/文件。php“?function openZip($file_to_open) { global $target; $zip = new ZipArch