Zend框架如何设置头(Zend Framework how to set headers)

2019-07-03 15:09发布

我有一个问题,我该怎么做这样的事情:

header("Content-Disposition: inline; filename=result.pdf"); 
header("Content-type: application/x-pdf"); 

与Zend框架,我曾尝试:

        $this->getResponse()
        ->setHeader('Content-Disposition:inline', ' filename=result.pdf')
        ->setHeader('Content-type', 'application/x-pdf');

但是,不能正常工作。

最好的祝福,

Answer 1:

你的语句设置响应头略微畸形:

$this->getResponse()
     ->setHeader('Content-Disposition', 'inline; filename=result.pdf')
     ->setHeader('Content-type', 'application/x-pdf');

以上应该工作-请注意在差别Content-Disposition -header。

顺便说一句...当你想强制下载对话框(而不是加载在浏览器中的文件),你应该使用Content-Disposition attachment

$this->getResponse()
     ->setHeader('Content-Disposition', 'attachment; filename=result.pdf')
     ->setHeader('Content-type', 'application/x-pdf');

根据不同的浏览器有可能,你也必须设置Content-Length或更改Content-type的组合(多头)一个或一个以上的application/force-downloadapplication/octet-stream和/或application/download 。 正如我在评论中写道有时缓存头可以用你下载的干扰。 请检查该缓存,头被发送。



Answer 2:

晚表,我可以推荐这个动作助手作为一个简单的,可重用的组件以供发送文件或内存中的数据到浏览器。

有缓存,配置选项,并可以利用Apache的SENDFILE



Answer 3:

我的猜测是,你正在做的事情,如:

$this->getResponse()
        ->setHeader('Content-Disposition:inline', ' filename=result.pdf')
        ->setHeader('Content-type', 'application/x-pdf');
fpassthru($filename);
exit();

或者其他的东西。

这里的响应将永远不会被渲染(这使得头)。 该响应动作后打印过程中呈现,通常。

你将不得不直接设置的标头(如你在非面向对象的代码说明),或使用$this->getResponse()->sendHeaders()直接。



Answer 4:

我有一个报头组。 它没有设置,但他补充说。 因此,我不得不为text / html,并应用/ PDF格式的内容类型。

标记的内容类型与TRUE进行的下载可能在IOS和其它设备这表明在下载或错误后才神秘符号:

->setHeader('Content-type', 'application/x-pdf', true);

setHeader($name, $value, $replace = false)

来自: https://framework.zend.com/manual/1.12/de/zend.controller.response.html



Answer 5:

解决了

        $this->getResponse()
         ->setHeader('Content-Disposition:inline', ';filename=result.pdf')
             ->setHeader('Content-Type', 'application/x-pdf');


文章来源: Zend Framework how to set headers