Zend Framework如何设置标头

时间:2009-08-25 05:44:31

标签: php zend-framework

我有一个问题,我该怎么做:

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

使用Zend Framework,我尝试过:

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

但是效果不正确。

最诚挚的问候,

5 个答案:

答案 0 :(得分:54)

您设置响应标头的声明略有不正确之处:

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

以上内容应该有效 - 请注意Content-Disposition - 标题中的差异。

顺便说一下......如果要强制下载框(而不是在浏览器中加载文档),则应使用Content-Disposition attachment

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

根据浏览器的不同,您可能还必须设置Content-Length或将Content-type更改为application/force-download中的一个或多个的组合(多个标题),{ {1}}和/或application/octet-stream。正如我在评论中写的,有时缓存标题可能会干扰您的下载。检查发送的缓存标头。

答案 1 :(得分:6)

在表格后面,我可以推荐this action helper作为一个简单的,可重复使用的组件,用于将文件或内存数据发送到浏览器。

具有缓存,处置和可以使用Apache Sendfile的选项

答案 2 :(得分:2)

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

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

或其他什么。

此处的响应将永远不会呈现(呈现标题)。通常,在动作后打印期间会呈现响应。

您必须直接设置标头(正如您在非oo代码中所述),或直接使用$this->getResponse()->sendHeaders()

答案 3 :(得分:0)

我有一个标题集。 它没有设置,但是添加了。 所以我有一个Content-Type of text / html和application / 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

答案 4 :(得分:-5)

解决

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