【问题标题】:PHP ZipArchive class does not create archivePHP ZipArchive 类不创建存档
【发布时间】:2017-02-09 12:27:06
【问题描述】:

我正在尝试使用以下代码创建所选文件的存档

$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 存档解压缩到 workspace 目录,以更改 zip 存档中包含的文件。在此之后,我想再次将所有文件压缩回 output.zip 存档。

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

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

PHP 警告:ZipArchive::close(): Read error: Is a directory in /home/user/zip.php on line 100

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

编辑:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    $zip = addFile($file);

    替换为:

    $zip->addFile($file);

    【讨论】:

    • 不,这是 stackoverflow 上的错字,而不是实际代码。我正在做那个更正。感谢您指出!
    • 你能给我 $files 的代码并确保在这个文件中只有文件而不是目录吗?
    • 感谢您对这个问题感兴趣。我已在上述问题中添加了所需的详细信息。
    • 您的代码对我有用。如何启动 php 脚本?
    • 感谢您在本地运行代码的努力。我这样运行代码:class A { public function A1 () { /** * the code above */ } } class B { public function B1 { $a = new A(); $a-&gt;A1(); } } 这整个东西都在 CakePHP 3 应用程序中
    猜你喜欢
    • 2023-03-03
    • 2013-05-02
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2018-12-06
    相关资源
    最近更新 更多