2009-08-25 96 views
29

我有一個問題,我該怎麼做這樣的事情:Zend框架如何設置頭

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'); 

但無法正常工作。

最好的問候,

+0

可能的標題已發送? – Pawka 2009-08-25 05:55:19

+0

PDF的正確Mime-Type是application/pdf。 – 2010-11-25 20:56:27

回答

53

你的語句設置響應頭稍微畸形:

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

上面應該工作 - 請注意在Content-Disposition的區別 - 頭。

順便說一下...當你想強制下載盒(而不是在瀏覽器中加載文檔),你應該使用Content-Dispositionattachment

$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。正如我在評論中寫道的,有時緩存標題可能會影響您的下載。檢查以查看哪些緩存頭被髮送。

+0

你是例子不起作用SR,我不再收到下載框。這裏是我的代碼:http://pastebin.com/d6be142ab – Uffo 2009-08-25 06:26:46

+0

哪個瀏覽器?你能檢查通過電線實際發送了哪些標題嗎?特別是一些緩存頭可能會干擾文件下載。 – 2009-08-25 07:08:27

+4

@Uffo:如果你想強制下載,你應該在你的問題中這樣說。你只問過設置標題的正確方法是什麼,而S. Gehrig的原始答覆就是這樣。 – Rytmis 2009-08-25 09:09:41

-5

解決

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

看看S. Gehrig的回答,這是正確的。你可能會工作,但只是偶然。 「:inline」不是標題名稱的一部分。 – Rytmis 2009-08-25 06:14:51

6

在表格末尾,我可以推薦this action helper作爲一個簡單的,可重用的組件,用於向瀏覽器發送文件或內存數據。

擁有緩存,配置選項,並可以利用Apache的SENDFILE

+0

很好找,謝謝 – Mark 2009-08-25 14:53:13

+3

鏈接已死;任何替代品? – 2010-04-21 11:34:41

+1

@Aron見http://github.com/noginn/noginn/blob/master/Noginn/Controller/Action/Helper/SendFile.php – 2010-04-21 12:00:21

2

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

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

什麼的。

此處的響應將永遠不會呈現(呈現標題)。響應通常在執行後打印中呈現。

您將不得不直接設置標題(如您在非oo代碼中記錄的那樣),或直接使用$this->getResponse()->sendHeaders()

0

我有一個標題集。 它沒有設置,但添加。 所以我有一個內容類型的文本/ 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