Symfony2中没有使用Response对象修改标头

时间:2012-03-31 20:43:53

标签: symfony

我正在尝试使用Symfony 2将PDF返回到浏览器,所以一旦找到该文件,我就会使用:

return new Response(readfile($file_path), 200, array(
'Content-Type' => 'application/pdf'
));

但如果我加载页面,则不会修改标题,并且内容不会被解释为pdf ...

< HTTP/1.1 200 OK
< Date: Sat, 31 Mar 2012 20:39:20 GMT
< Server: Apache
< X-Powered-By: PHP/5.3.6
< Set-Cookie: PHPSESSID=XXXX; path=/
< Transfer-Encoding: chunked
< Content-Type: text/html

我迷失了这个问题。有什么想法吗?

2 个答案:

答案 0 :(得分:7)

首先执行

readfile,然后开始将文件发送到客户端。这会触发生成标头。然后readfile的返回值传递给Response。当Response返回给客户端时,PHP无法更改标头,因为它们是在readfile运行时触发的。

readfile替换为file_get_contents

答案 1 :(得分:1)

您可能还想使用以下

new StreamedResponse(function () use ($file) {
    readfile($file);
}, 200, array('Content-Type' => 'image/png');