6

我完全无法解释为什么这不起作用。帮助!

$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);

if ($res === 'TRUE') {
    $unzip_success= $zip->extractTo('/temp/', "inscriptions.txt")

    $zip->close();
}
  • 目标目录“temp”是“0777”权限
  • 根据 PHP.net 文档的要求,从 $res 获得的代码是“11”而不是“TRUE”
  • 注意:必须输入 $archive 的完整 url 和 extractTo 的第一个参数
4

8 回答 8

5

if nothing works then check if your server is linux. if its linux you can run unzip command to unzip your file via php's system/exec function. i.e

system("unzip archive.zip");

to extract specific file you can check man docs for unzip. many times due to server parameters zip library doesn't work as expected in that cases i switch back to linux commands.

于 2012-07-09T20:01:38.613 回答
2

我遇到了同样的问题,我已经解决了这个问题:) $_SERVER['DOCUMENT_ROOT']用于 url。我的代码(codeigniter):

$this->load->library('unzip');
$file = $this->input->GET('file');
$this->unzip->extract($_SERVER['DOCUMENT_ROOT'].'/TRAS/application/uploads/' .    $file,$_SERVER['DOCUMENT_ROOT'].'/TRAS/application/views/templates/' . $file);
于 2014-10-05T06:23:58.383 回答
2

问题是您正在引用TRUE,这是一个关键字,应该不带单引号。另外,您可以在使用locateName提取之前检查该文件是否存在于 zip 存档中:

$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);

if ($res === true && $zip->locateName('inscriptions.txt') !== false) {
    $unzip_success= $zip->extractTo('/tmp/', "inscriptions.txt");

    $zip->close();
}
于 2012-07-09T19:42:38.280 回答
2

ZipArcive::extractTo 区分大小写。如果要提取的文件名与压缩文件名不完全一致,则该方法返回 false。

于 2014-06-18T20:20:11.997 回答
1

如果$res等于 11,则表示ZipArchive无法打开指定的文件。

要对此进行测试:

$archive = "x.zip";
$zip = new ZipArchive();
$res = $zip->open($archive);

if($res == ZipArchive::ER_OPEN){
    echo "Unable to open $archive\n";
}
于 2012-07-09T19:49:43.410 回答
1

我遇到了同样的问题,但是我可以打开 zip 文件,true打开后它会返回。

我的问题是我在$zip->extractTo().

删除zip文件中以中文(非英语)命名的文件后,我终于成功了。

于 2016-12-19T07:46:38.240 回答
1

添加文档根目录也对我有用。这是我的代码

$zip = new ZipArchive;
        if ($zip->open($_SERVER['DOCUMENT_ROOT'].'/'.$folder.$file_path) === TRUE) {
            $zip->extractTo($_SERVER['DOCUMENT_ROOT'].'/$folder');
            $zip->close();
            echo 'ok';
        }
于 2016-08-11T06:10:42.427 回答
-1

我在 Windows 10 上遇到了同样的问题。我发现的唯一解决方案是尝试 extractTo 两次,即使 open() 成功:

$zip = new ZipArchive;
if ($open === true) {
    $result = $zip->extractTo($destination);
    if ($result === false) {
        $result = $zip->extractTo($destination);
    }
    $zip->close();
}

第二个 extractTo() 有效(没有干预操作)的事实似乎表明存档或目标目录没有任何问题。

于 2018-08-12T14:45:16.197 回答