2011-11-03 77 views
0

有沒有辦法強制指定任何給定的文件,而不給它的標題?我擁有的是少數不同的文檔和其他文件類型,客戶希望根據請求提供下載,但是他們希望儘可能掩蓋文件路徑。不幸的是,我不知道這些文件中的大多數是什麼類型的文件,他們想要一些動態的功能。這件作品我沒有得到報酬。所以我正在尋找快速和骯髒的,如果可能的話。有些東西不會迫使我想出每種文件類型的可能邏輯,只有這樣我纔可以爲有問題的文件類型構建標題,以便它可以正確下載。PHP強制文件下載不使用標題

有沒有辦法實現這一目標?

+1

您的要求是相互排斥的。 –

+1

我認爲這可以通過.htaccess完成。不完全確定你在問什麼。 – OptimusCrime

+0

我想通常我想要做的就是讓一個文件叫它downloads.php,然後我從數據庫(主要是服務器上的文件路徑)中提取數據的任何文件,無論是txt,doc,pdf,jpg,什麼任何東西和所有東西都和文件類型一樣。我所需要的是,即使瀏覽器在默認情況下在查看窗格中打開某些內容,也會觸發文件下載,無論文件類型如何。 – chris

回答

2

那麼,如果我處理你的問題,你想要一個簡單的方法來使用PHP腳本下載任何類型的文件。

首先,你有幾種方法可以做到這一點...

最不安全的一個: - 你有一個目錄(可以說「文件/」),其中的所有文件都存儲。您創建一個接收參數(文件名)的腳本,然後在該目錄中查找該文件。這是不安全的,因爲任何人都可以嘗試下載任何文件,並訪問只傳遞「../」作爲參數的子目錄。你必須在那裏做一些解析。

其他選項是使用數據庫,您存儲文件名並將它們關聯到一個唯一的ID,稍後您將有如下腳本:download.php?id = 1並下載DB ID爲1的文件。是我認爲最好的。

無論如何,你可以選擇任何你認爲是最好的,代碼強制下載對話框應該是這樣的:

$file = "my_file.zip"; // this is what you will get from a param (i.e. ?file=my_file.zip) or from DB query 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
header("Content-Disposition: attachment; filename=$file"); // this is totally needed 
header("Content-Length: ".filesize($file)); 
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: binary"); 
readfile($file); 

這應該做的伎倆。

祝你好運!