PHP ZipArchive类不会创建存档

时间:2017-02-09 12:27:07

标签: php zip cakephp-3.0 ziparchive php-zip-archive

我正在尝试使用以下代码

创建所选文件的存档
$zip_in = new \ZipArchive;
if ($zip_in->open('input.zip') === TRUE) {
    $files = array();
    for ($loop = 0; $loop < $zip_in->numFiles; $loop++) {
        $files[] = $zip_in->getNameIndex($loop);
    }
    $zip_in->extractTo('workspace');
    $zip_in->close();
    /**
     * Changes done to files extracted inside WORKSPACE DIR above
     */
    chdir('workspace');
    $zip_out = new \ZipArchive();
    $zip_out->open('output.zip', \ZipArchive::CREATE);
    foreach ($files as $file) {
        $zip_out->addFile($file);
    }
    $zip_out->close();
}

在这里,我尝试将 input.zip 存档解压缩到工作区目录,以对zip存档中包含的文件进行更改。在此之后,我想再次将所有文件压缩回 output.zip 存档。

编辑文件时,不会触及用于存储提取文件名的变量$files。文件名是硬编码的,不能通过任何变量接收。

最后保存 output.zip 存档的最后一行在控制台上显示以下警告:

  

PHP警告:ZipArchive :: close():读取错误:第100行/home/user/zip.php中的目录

我无法理解这次失败的原因。错误消息不清楚。这次失败的原因是什么?

修改

根据要求,添加了代码以调用上面讨论的归档处理程序。

class A {
    public function A1 () {
        /**
         * the code above
         */
    }
}

class B {
    public function B1 {
        $a = new A();
        $a->A1();
    }
}

这是CakePHP 3应用程序的一部分。接受提示注释,当我在CakePHP 3应用程序之外独立运行代码时,它工作得很好。但是在CakePHP应用程序中存在一些问题。我正在添加其他标签以突出CakePHP社区中的问题。

1 个答案:

答案 0 :(得分:1)

因为您的代码错误而您正在用文件替换ZipArchive实例:

$ zip = addFile($ file);

替换为:

$ zip-&GT; addFile($文件);

相关问题