有没有人成功地使用了unzip_file?它会上传压缩包,但不会解压!

时间:2011-01-31 作者:Scott B

当我调用下面的WordPress unzip\\u file()函数时,它不是实际提取zip,而是将其移动到目标文件夹中。

当我从includes/file跟踪$file和$to时。php我得到:

file: C:\\xampplite\\htdocs\\testsite/wp-content/themes/mytheme/styles/myzip.zip 

To: C:\\xampplite\\htdocs\\testsite/wp-content/themes/mytheme/styles/
我错过了什么?

<?php
require(\'../../../wp-blog-header.php\');
require(\'../../../wp-admin/includes/file.php\');
?>
<?php  
if (!is_user_logged_in()){
    die("You Must Be Logged In to Access This");
}
if( ! current_user_can(\'edit_files\')) {
    die("Oops sorry you are not authorized to do this");
}
?>

<form enctype="multipart/form-data" action="" method="post">
    <input type="file" name="fupload" /><br /><br />
    <input type="submit" value="Install" onclick="doLoader();" />
</form>

<?php

if(isset($_FILES[\'fupload\'])) {
    $filename = $_FILES[\'fupload\'][\'name\'];
    $source = $_FILES[\'fupload\'][\'tmp_name\'];
    $type = $_FILES[\'fupload\'][\'type\']; 
    $name = explode(\'.\', $filename); 
    $target = TEMPLATEPATH.\'/styles/\';

    // permission settings for newly created folders
    $chmod = 0755;  

    $saved_file_location = $target . $filename;
    if (move_uploaded_file($source, $saved_file_location)) 
    {
        unzip_file($saved_file_location, $target);
    } 
    else 
    {
        die("There was a problem with the upload. Plese verify you have uploaded a valid zip file");
    }
}
?>

3 个回复
最合适的回答,由SO网友:Otto 整理而成

您是否有允许直接访问的文件系统和设置?如果文件系统对象需要FTP凭据,那么如果不为其提供正确的用户名/密码/服务器信息,则可能无法获得所需的结果。

SO网友:Oloufemi
if (move_uploaded_file($source, $saved_file_location)) 
    {
        WP_Filesystem();
        unzip_file($saved_file_location, $target);
    } 
SO网友:user1454923

如果解压挂起,则可能是某些PHP版本中的错误。在我的托管帐户上显示为:WordPress更新挂起,WordPress插件/主题更新挂起,PHP解压(不调用WordPress)挂起。

$zip->extractTo($path.\'/folder\')copy("zip://".$zipFullPath.\'#\'.$filename, $destPath.$destName) 都挂起,在系统日志、PHP日志或屏幕上没有错误消息。

文件夹已创建,其中没有文件。

看见http://lcblog.lernerconsult.com/2013-php-unzip-bug-makes-wordpress-updates-hang/ 用于PHP代码(无WordPress)和测试,以证明该漏洞存在于PHP本身。

通过将我的托管帐户PHP版本从PHP 5.2.17更改为PHP 5.3.24。htaccess配置更改,修复了问题:PHP解压,WordPress更新工作。

相关推荐