2011-02-15 98 views
1

在Codeigniter中,我們可以使用下載助手中的force_download($file_name,$data)函數強制瀏覽器下載文件。告訴瀏覽器在Codeigniter中打開或下載文件

但是這不是我所需要的,我希望Codeigniter以該文件對應的MIME類型響應一個http頭,以便瀏覽器可以或不可以下載該文件,具體取決於是否有應用程序在客戶端機器上註冊該MIME類型(如果有的話,該應用程序將打開該文件)。

有沒有辦法用Codeigniter做到這一點?

非常感謝大家。

回答

6

不,你不能用Codeigniter做到這一點。

一般來說,使用像PHP這樣的服務器端技術,您只能將內容發送到客戶端,而不能直接與客戶端交互。客戶可以根據您發送的任何內容來做他們想做的事情。即使使用像javascript這樣的客戶端工具,(幸好)您只能與客戶端計算機進行有限的交互。你想要做的是讓一個網站(自動)訪問,下載一個軟件,並在客戶端機器上執行它...

這就是所謂的惡意軟件......(由製造商帶給你的ActiveX

以上是直接回應

」 ......這樣瀏覽器可能會或可能不會下載文件,這取決於是否有針對MIME註冊的應用類型上客戶機(如果有的話,該應用程序將打開該文件)

UPDATE

可以設置通過普通的PHP頭操縱mime類型。作爲第一個示例,以下示例直接來自php header() documentation

<?php 
// We'll be outputting a PDF 
header('Content-type: application/pdf'); 

// It will be called downloaded.pdf 
header('Content-Disposition: attachment; filename="downloaded.pdf"'); 

// The PDF source is in original.pdf 
readfile('original.pdf'); 
?> 
+0

不是真的惡意軟件,用戶上傳了一些文件,我把它們放在webroot之外的地方。用戶只能下載他/她已上傳的文件。所以我在Codeigniter中創建了一個路由,並且在控制器的相應功能中,我只在他們已經登錄(認證)時才爲他們提供文件。我正在使用file_get_contents來讀取文件,現在我需要一個像force_download這樣的函數來告訴瀏覽器下載/打開文件,就好像該文件是從webroot提供的一樣。 – bobo 2011-02-15 21:53:37

相關問題