【发布时间】: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