2013-08-19 148 views
0

我想強制下載pdf,doc或docx文件。強制在php下載文件?

使用以下代碼,Pdf文件會在我的選項卡中打開而不是下載。 我有一個表中有每一行的下載鏈接。我想點擊此鏈接下載文件。

foreach($a as $id = > $item) { 
    echo '<tr><td><a href="http://staging.experiencecommerce.com/ecsite-v3/uploads/'.substr($item['f_resume'], 63).'" ">'; 

    //Note:substr($item['f_resume'], 63) is file_name 

    echo '</a></td><td>'.$item['f_date'].'</td></tr>'; 
} 

我通過一些Question繼續SO與同樣的問題,並試圖自己解決,但不成功。

當我將解決方案包含在foreach中時,頁面在加載時下載文件,當我將解決方案放到外面時,將下載Php腳本。 我哪裏錯了?

+0

您是否在鏈接中嘗試了target =「_ blank」?據說它不會驗證所有的測試,因爲客戶應該選擇打開文件的位置,但也許會有所幫助。 –

+0

我不想打開新標籤,只需下載文件.. –

+0

那麼您可以向我們展示一個現場網站嗎?也許我們可以這樣看待問題。我認爲這裏沒有足夠的信息。 –

回答

1

我們的整個聊天會話我認爲我們可以離開這裏了這個答案,只是以供將來參考後:

正如所看到的在您的初始後,一旦點擊該鏈接,你放棄所有控制瀏覽器所以它會按照它認爲合適的方式處理文件。通常這涉及到試圖找到系統可以找到的任何應用程序或插件來處理您的文件。

無論何時您想強制下載文件,您只需將演示文稿本身與當前任務分開。在這種特殊情況下:

1 - 創建一個新腳本,通過傳遞的參數識別文件並強制下載文件,如本網站php.net/manual/en/function.readfile中的示例所示。 PHP。

2 - 重做演示文稿,以便鏈接不再指向文件本身,而是指向具有適當參數的新腳本(例如,download_file.php?file_id =#FILE_ID#)。

3 - 在設置標題之前,請處理無法找到文件的情況,例如die(「無法找到文件」)。

建議一句話:不要使用文件位置作爲參數!!!使用相反的東西,您可以從數據庫中檢索,然後收集文件位置。如果你通過文件位置本身作爲一個參數沒有從這樣阻止我:

http://yoursite.com/download_file.php?file=download_file.php 
http://yoursite.com/download_file.php?file=index.php 
http://yoursite.com/download_file.php?file=whatever_file_there_is 

有了充足的情況下,喜歡的xtype請求的文件的自動檢測,那就讓我來訪問你的代碼,並利用任何可能的瑕疵

一秒鐘和最後的忠告:php只能一次輸出一件東西。如果你想要它輸出一個網站,你不能輸出一個PDF文件。這就是爲什麼 - 除了其他原因外 - 您將手頭上的不同任務分開,這就是爲什麼當您在每個鏈接打印後直接嘗試下載腳本時,所有內容都會出錯。

如果有幫助,可以將php想象成您平常的實時編程語言,而不是打印機。它將打印出您告訴它的所有內容,並以合理大小的塊來提供它。直到到達結束時纔會停止,除非您在適當的條件下再次調用腳本,否則無法探索兩個相反的分支代碼路徑。

希望聊天幫助你。

+0

毫無疑問..我從中學到了很多東西..沒有其他問題可以解釋你提到的缺陷.Thx對於那個。如果可能,只需添加其他文件代碼和一些href = somthing?id = 34 also..so那未來的遊客會受益.. Thx一噸。 –

3

您可以設置標題,這將迫使下載:

header('Content-Type: application/force-download'); 
header('Content-Disposition: attachment; filename="filenamehere.pdf"'); 

如果你不使用PHP提供的內容的文件,你可以使用如設置頭。 .htaccess(要求mod_headers)。

<FilesMatch ".pdf$"> 
FileETag None 
<ifModule mod_headers.c> 
Header set Content-Type "application/force-download" 
</ifModule> 
</FilesMatch> 
+0

我試過了,我應該在哪裏放置這段代碼? –

+0

在提供pdf文件內容(例如'pdf.php')或'.htaccess'(更新後的答案)的文件中。 –

+0

我正在使用PHP,應該在腳本的頂部還是在foreach中包含此標頭?...我將再次嘗試此操作..我之前嘗試過這種方法,但是它會給我想要的結果。 –