0

我正在使用 symfony 2.0,我正在尝试动态生成一个 zip。

这是我的代码:

 public function downloadFontAction($slug)
        {
            $font = $this->getRepository(static::FONT_REP)->findOneBySlug($slug);

            $zip = new \ZipArchive;
            $zipName = $slug.".zip";
            if ($zip->open($zipName, \ZIPARCHIVE::CREATE | \ZIPARCHIVE::OVERWRITE) === TRUE) {
                foreach($this->container->getParameter('font_extensions') as $ext)
                {
                    $fontFile = call_user_func(array($font, "get".ucfirst($ext)));
                    //adding Fonts
                    if ($fontFile)
                    {
                        $zip->addFile('/Users/admin/Documents/public_html/GitHub/typ/web/static/'.$fontFile,$font->getSlug().".".$ext);
                    }
                }
                $zip->close();
            } else {
                echo 'failed';
            }

            $response = new Response();

            //$response->setContent(readfile($zipName));
            $response->setStatusCode(200);

            $response->headers->set('Content-Type', 'application/zip'); 
            $response->headers->set('Content-Disposition', 'attachment; filename="'.$zipName.'"');
            $response->headers->set('Content-Transfer-Encoding', 'binary');
            $response->headers->set('Content-Length', filesize($zipName));     
            $response->headers->set('Pragma', 'public');
            $response->headers->set('Expires', '0');
            $response->headers->set('Cache-Control', 'must-revalidate, post-check=0, pre-check=0');
            $response->headers->set('Cache-Control', 'private');
            @unlink($zipName);
            return $response;


        }

该函数返回一个空的 zip 文件,一旦我解压缩该文件,就会出现一个执行无限 bucle 的 cpgz 文件。zip 在服务器端正确生成,但无法通过此操作下载。

4

3 回答 3

1

I hope it is not too late. You are not setting the content of the response that is why it is an empty file. Befor returning the response, try something like this:

$response->setContent(file_get_contents($zipName));
于 2013-01-08T23:41:03.867 回答
0

@unlink($zipName);

下载前要删除文件吗?也许在这里不需要取消链接:)

于 2012-10-30T14:59:25.487 回答
0

好吧,同样的事情发生在我身上。我意识到这是写入临时文件夹时的权限问题。尝试给予足够的权限来写入临时文件夹。

另外尝试为下载脚本禁用 gzip。我通过在 php 页面顶部添加以下行来完成我的工作。

ini_set('zlib.output_compression', 'Off');
于 2013-02-17T20:39:30.313 回答