2009-06-15 35 views
0

文件下載我知道如何讓下載過程中發生,當下載情況它附加在網頁導致下載HTML。我如何過濾HTML?迫使用PHP

+0

你能否澄清一下,理想情況下使用一些示例代碼?目前還不清楚你的意思是「導致下載」 – 2009-06-15 23:08:37

回答

1

我明白,你想輸出一些流從PHP頁面下載?

如果是這樣,那就不要輸出從包含HTML,但如果重定向需要單獨的PHP頁面輸出僅下載流,與頭的頁面內容。

+0

這就像一半的答案。它只是在「如果你想下載,強制下載」。 – Jake 2013-06-12 13:48:21

4

如果我理解正確,這是一個普遍的問題。我解決它通過使用ob_start在我的index.php開始的任意輸出occures之前(啓動/根/入境文件)和下載我做到以下幾點:

ob_end_clean(); 
    header("Content-Type: application/octet-stream; "); 
    header("Content-Transfer-Encoding: binary"); 
    header("Content-Length: ". filesize("thefileinquestion").";"); 
    header("Content-disposition: attachment; filename=thefileinquestion"); 
    $fp = fopen(thefileinquestion, "r"); 
    while(!feof($fp)){ 
    $buffer = fread($fp, 1024); 
    echo $buffer; 
    flush(); 
    } 
    fclose($fp); 
    die(); 

更新

ob_start命令緩衝任何輸出(例如,通過echo,printf),並防止在實際下載之前發送給用戶的任何內容。 ob_end_clean比停止這種行爲,並允許再次直接輸出。 HTH。

+3

您可以通過調用readfile()將所有內容從'$ fp = ...'替換爲'fclose()'。 – 2009-06-15 23:19:51

1

確保文件流完成後,你不輸出額外的數據。在文件流完成後,使用exit()調用結束頁面執行。關閉'?>'標記後的任何字符(例如換行符)也可能導致下載問題。

移動下載腳本到它自己的文件應該發現任何問題更加容易,因爲它只有一件事。爲避免輸出任何最終的換行符,在這種情況下,您可以省略結尾的'?>'標記以及腳本的結尾。