繁体   English   中英

PHP ZipArchive 类不创建存档

[英]PHP ZipArchive class does not create 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用于存储提取的文件名的变量$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 社区中的问题。

因为您的代码是错误的,并且您正在用文件替换 ZipArchive 的实例:

$zip = addFile($file);

用。。。来代替 :

$zip->addFile($file);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM