PHP Zip存档 - 打开或者解压缩不起作用

时间:2012-07-09 19:24:18

标签: php zip

我完全不知道为什么这不起作用。帮助!

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

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

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

8 个答案:

答案 0 :(得分:3)

如果什么都不起作用,那么检查你的服务器是否是linux。 如果它的linux你可以运行unzip命令通过php的system / exec函数解压缩你的文件。 即

system("unzip archive.zip");

要提取特定文件,您可以检查man docs进行解压缩。很多时候由于服务器参数zip库不能正常工作,在那种情况下我切换回linux命令。

答案 1 :(得分: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();
}

答案 2 :(得分:2)

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

答案 3 :(得分:2)

我遇到了同样的问题,我已经解决了这个问题:) 使用$_SERVER['DOCUMENT_ROOT']作为网址。 我的代码(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);

答案 4 :(得分: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";
}

答案 5 :(得分:0)

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

$zip = new ZipArchive;
        if ($zip->open($_SERVER['DOCUMENT_ROOT'].'/'.$folder.$file_path) === TRUE) {
            $zip->extractTo($_SERVER['DOCUMENT_ROOT'].'/$folder');
            $zip->close();
            echo 'ok';
        }

答案 6 :(得分:0)

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

我的问题是$zip->extractTo()之后我弄错了。

在zip文件中删除以CHINESE(NO-ENGILISH)命名的文件后,我终于成功了。

答案 7 :(得分:-1)

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

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

第二个extractTo()起作用(没有干预动作)的事实似乎表明归档文件或目标目录没有问题。