2012-08-10 80 views
0

所以我在幾個地方和網站看到過這個文件下載似乎沒有指定Content-Length,所以下載一直繼續到服務器停止發送數據。動態長時間下載?

現在我想知道當我通過PHP腳本下載動態生成的文件時,如何使用PHP實現類似的功能。

我已經做了一些研究,但找不到任何東西。

(作爲一個具體的例如:我想,讓用戶下載一個ZIP文件,而它仍然在建。)

所以,我怎麼沒有服務器端知道如何創建一個動態的長期下載它會變成什麼?

+2

只是...不要發送Content-Length標題並開始輸出數據? – deceze 2012-08-10 10:28:45

+0

是的,如果您沒有發送長度,客戶將無法以通常的條形圖形式查看下載進度。但它仍然有效。 – halfer 2012-08-10 10:31:49

回答

1

如上所述,您可以跳過發送Content-Length標題。此功能可派上用場:

function force_download($file){ 
    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)); <--- Don't send length 
    readfile($file); 
}