gpt4 book ai didi

php - symfony : setHttpHeader() doesn't work, header() 确实

转载 作者:可可西里 更新时间:2023-11-01 13:15:28 29 4
gpt4 key购买 nike

我在 symfony 中构建了一个简单的操作,它通过 wkhtmltopdf 生成一个 PDF 文件并将其输出到浏览器。

代码如下:

  $response = $this->getResponse();
$response->setContentType('application/pdf');
$response->setHttpHeader('Content-Disposition', "attachment; filename=filename.pdf");
$response->setHttpHeader('Content-Length', filesize($file));
$response->sendHttpHeaders();
$response->setContent(file_get_contents($file));
return sfView::NONE;

这在我的本地开发环境中运行良好 - 我的浏览器按预期获取 header ,显示下载对话。

现在我更新了我的测试环境,运行 Apache 2.2.9-10+lenny9 和 PHP 5.3.5-0.dotdeb.0。如果我现在为测试环境调用该 URL,我的浏览器不会获得任何自定义设置 header :

Date    Mon, 07 Mar 2011 10:34:37 GMT
Server Apache
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Transfer-Encoding chunked

如果我在操作中通过 header() 手动设置它们,Firebug 会按预期显示标题。有谁知道可能出了什么问题?是 symfony 错误,还是 php 或 apache2 配置问题?我不明白。 :-/

提前致谢!

最佳答案

你的问题在这里:

return sfView::NONE;

将此更改为:

return sfView::HEADERS_ONLY;

编辑 由于额外评论而更新。

由于您正在尝试下载 pdf,所以您没有正确处理问题。不要使用 sendContent()。见下文(这是我编写的生产网站的一个片段,已证明适用于所有主要浏览器):

$file = '/path/to/file.pdf';
$this->getResponse()->clearHttpHeaders();
$this->getResponse()->setStatusCode(200);
$this->getResponse()->setContentType('application/pdf');
$this->getResponse()->setHttpHeader('Pragma', 'public'); //optional cache header
$this->getResponse()->setHttpHeader('Expires', 0); //optional cache header
$this->getResponse()->setHttpHeader('Content-Disposition', "attachment; filename=myfile.pdf");
$this->getResponse()->setHttpHeader('Content-Transfer-Encoding', 'binary');
$this->getResponse()->setHttpHeader('Content-Length', filesize($file));

return $this->renderText(file_get_contents($file));

关于php - symfony : setHttpHeader() doesn't work, header() 确实,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5218648/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com