2011-07-06 165 views
2

我發現這個代碼,讓我打開一個窗口,允許用戶下載一個文件(的download.php)PHP:張貼鏈接下載文件

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=' . basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 
exit; 

它運作良好,以允許用戶從服務器下載文件通過一個彈出窗口,但我有兩個問題:

  1. 執行的代碼塊前,我在屏幕上(瀏覽器)一些文本打印。但是,當使用該塊在最後執行.php文件時,屏幕上將不顯示任何內容,並直接進入下載。我如何確保在瀏覽器上打印的內容,然後允許下載文件?

  2. 然後,我想也許我會在打印後插入一個鏈接,但是我無法使其工作。當我點擊鏈接下載(href ='download.php')時,返回一個空白屏幕,沒有其他的。

有人能聽到並幫助嗎? TIA!

+1

請注意,無論何時使用'header'函數,它必須在任何輸出發送到瀏覽器之前。標題總是在頁面內容之前發送。 –

+0

哦,所以我需要單獨的頁面..我想出瞭如何使用Javascript創建一個彈出窗口,但我還沒有弄清楚如何在新的彈出窗口上運行PHP腳本。 – musicliftsme

+1

彈出窗口應該打開一個URL到一個單獨的頁面。 –

回答

1

您無法爲瀏覽器返回HTML 從瀏覽器的單個頁面請求下載文件。它期望一個或另一個。您可以用文本打開一個彈出窗口,然後將JavaScript重定向到發送該文件的第二個PHP腳本。

1

任何你回聲將成爲你的下載的一部分。您需要兩個單獨的頁面......一個顯示您的文本,另一個僅顯示文件。

1

每個頁面可以一種方式解析僅,HTML/PDF /圖像/下載文件等...
解決方案:做你想做的用戶在HTML見(鏈接/文什麼都)當他們按下下載鏈接時,你會在隱藏的iframe中打開它。

現在,不要過來抱怨這不是一個踢屁股的方式來解決這個問題,我們是在2011年,等
這是唯一的方法(除使用Java或Flash)來解決這個(可能是HTML5將有一個漂亮的解決方案,但大多數用戶瀏覽器不支持這一點)。