2009-08-07 56 views
1

從Zend Framework MVC提供文件時的最佳做法是什麼?這些文件必須由MVC提供,因爲它們受到保護。在Zend Framework中提供文件MVC

我知道你可以讀取文件並將其放入Response對象,但這看起來像一個不好的做法,因爲你將整個文件讀入內存然後提供它。現在我通常會這樣做:

header('Content-type: image/jpeg'); 
fpassthru(fopen($path, 'rb')); 
exit; 

但是這也不正確,因爲我停止執行腳本。有什麼建議麼?

回答

1

我看到沒有錯只是exit();你需要注意的是你可能使用的任何輸出緩衝層(gzip壓縮等)。大文件可能會很快炸燬這些緩衝區,因此您需要關閉它們,並用fopen/fread循環潛在地「分塊」輸出。

1

您可以嘗試使用X-Sendfile標題。它由lighttpd和更新版本的apache支持。基本上,網絡服務器將用您指定的文件替換腳本的輸出。缺點是它特定於Web服務器的配置,因此您可能位於不支持它的主機上。

+0

這樣會很好,但是我們有足夠的問題來解決服務器配置問題,我不想依賴它。 – smack0007 2009-08-07 08:09:23

1

我建議建立一個超級簡單的腳本基於票據的系統上檢索文件,比如在CMS您生成票DB - 文件名,獨特的哈希比重定向到超級簡單的文件retieving腳本(file.php ?散列= asd52ad3as1g5)。它將從查詢中獲得散列並基於它獲取真實文件名,並按照您使用fpassthru所寫的那樣將其推送輸出。哈希需要是唯一的,很難猜測...

+0

但只是如果你需要完成你的腳本,我認爲這是沒有問題的退出()它也用於內部ZF重定向;以及;) – 2009-08-07 11:09:31