创建并下载Zip文件(maennchen/ZipStream PHP)

创建并下载Zip文件(maennchen/ZipStream PHP),php,symfony,symfony-3.4,Php,Symfony,Symfony 3.4,在我的项目中,我们使用了maennchen/ZipStream PHP包。现在我正在尝试创建和下载zip文件,但当我打开zip文件时,出现了一个错误“空存档” 如果转储$zip,则file参数为空。我认为addFile方法不起作用 你能帮我吗 提前感谢。Symfony的StreamdResponse已经发送了标题,因此您不应该在“流”中覆盖它们 试试这个 return new StreamedResponse(function() use ($filenames, $logger) {

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

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

你能帮我吗


提前感谢。

Symfony的StreamdResponse已经发送了标题,因此您不应该在“流”中覆盖它们

试试这个

return new StreamedResponse(function() use ($filenames, $logger) {
        $opt = new \ZipStream\Option\Archive();
        $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',
    ]);

Symfony的StreamdResponse已经发送了头,因此您不应该在“流”中覆盖它们

试试这个

return new StreamedResponse(function() use ($filenames, $logger) {
        $opt = new \ZipStream\Option\Archive();
        $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',
    ]);

嗨,档案只是空的。我正在尝试使用
addFile('test.txt','MY CONTENT HERE!')
但都是一样的…archvie是空的!我不确定您的
ArchiveOptions
别名代表什么,请确保它是
\ZipStream\Option\Archive
。另外,根据文档的建议添加
->setZeroHeader(true)
。我已经更新了我的答案,档案只是空的。我正在尝试使用
addFile('test.txt','MY CONTENT HERE!')
但都是一样的…archvie是空的!我不确定您的
ArchiveOptions
别名代表什么,请确保它是
\ZipStream\Option\Archive
。另外,根据文档的建议添加
->setZeroHeader(true)
。我已经更新了我的答案