创建并下载 Zip File (maennchen/ZipStream-PHP)



在我的项目中,我们使用了maennchen/ZipStream-PHP捆绑包。现在我正在尝试创建和下载zip文件,但是当我打开zip文件时,出现错误"空存档"。

return new StreamedResponse(function() use ($filenames, $logger) {
$filename = 'example.zip';
$opt = new ArchiveOptions();
$opt->setContentDisposition("attachment;filename="$filename"");
$opt->setContentType('application/octet-stream');
$opt->setEnableZip64(false);
$opt->setFlushOutput(true);
$opt->setSendHttpHeaders(true);
$zip = new ZipStream($filename, $opt);
foreach ($filenames as $f) {
if (true === file_exists($f)) {
try {
$zip->addFileFromPath(basename($f), $f);
} catch (Exception $exception) {
$logger->error($exception->getMessage());
}
} else {
$logger->error(sprintf('File %s does not exist.', $f));
}
}
$zip->finish();
});

如果我转储$zip则文件参数为空。我认为 addFile 方法不起作用。

你可以帮我吗?

提前谢谢。

Symfony的StreamedResponse已经发送了标头,所以你不应该在"流"中覆盖它们。

试试这个;

return new StreamedResponse(function() use ($filenames, $logger) {
$opt = new ZipStreamOptionArchive();
$opt->setZeroHeader(true);
$opt->setEnableZip64(false);
$zip = new ZipStream(null, $opt);
foreach ($filenames as $f) {
if (true === file_exists($f)) {
try {
$zip->addFileFromPath(basename($f), $f);
} catch (Exception $exception) {
$logger->error($exception->getMessage());
}
} else {
$logger->error(sprintf('File %s does not exist.', $f));
}
}
$zip->finish();
},
200,
[
'Content-Disposition' => 'attachment;filename="example.zip"',
'Content-Type' => 'application/octet-stream',
]);

最新更新