我正在使用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文件,一旦我解压缩文件出现一个cpgz文件做一个无限的bucle。 zip在服务器端正确生成,但无法通过此操作下载。
答案 0 :(得分:1)
我希望现在还为时不晚。您没有设置响应的内容,这就是它为空文件的原因。返回响应,尝试这样的事情:
$response->setContent(file_get_contents($zipName));
答案 1 :(得分:0)
@unlink($ zipName);
您是否在下载之前删除了该文件? 也许unlink不需要这里:))
答案 2 :(得分:0)
同样的事发生在我身上。在写入临时文件夹时,我意识到它是权限问题 ..尝试给予写入临时文件夹的足够权限。
另外,请尝试为下载脚本禁用gzip。我通过在php页面顶部添加以下行来完成我的工作。
ini_set('zlib.output_compression', 'Off');