PHP ZipArchive类不创建存档



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

$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不会在任何地方被触摸。文件名是硬编码的,不通过任何变量接收。

最后保存输出.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应用程序的一部分。根据提示注释,当我在CakePHP3应用程序之外独立运行代码时,它运行得很好。然而,在CakePHP应用程序中存在一些问题。我添加了额外的标签来突出CakePHP社区中的问题。

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

$zip=addFile($file);

替换为:

$zip->addFile($file);

相关内容

  • 没有找到相关文章

最新更新