2012-11-21 59 views
0

我正在寫一個php頁面,從服務器下載文件到用戶。這裏是我的代碼:無法下載多個文件

clearstatcache(); 
    //Output stream to client 
    header("Pragma: public"); 
    header("Expires: 0"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: private", false); 
    header("Content-Type: application/zip"); 
    header("Content-Disposition: attachment; filename=\"" . $zipName . "\"; filename*=utf-8''" . rawurlencode($zipName) . ";"); 
    header("Content-Transfer-Encoding: binary"); 
    header("Accept-Ranges: bytes"); 
    header("Content-Length: " . (filesize($downloadFile))); 


    $fp = fopen($downloadFile, "rb"); 
    ob_clean(); 
    while (!feof($fp) && (connection_status() == 0) && !connection_aborted()) { 
    print(fread($fp, 1024 * 1024)); 
    flush(); 
    ob_flush(); 
    } 
    fclose($fp); 

我面臨的問題是:當用戶點擊下載按鈕,服務器發送文件給用戶。當用戶下載文件時,用戶再次點擊下載按鈕,請求現在不執行(所有其他請求不能執行)。當用戶完全下載第一個文件時,第二個文件就是開始。

+3

你在使用會話嗎? –

+0

順便說一句,除非你知道如何處理範圍請求,否則不要發送'Accept-Ranges:bytes'。我也不確定你爲什麼每次都使用'ob_flush()';我只會在循環之前使用'ob_end_clean()'。 –

+0

@Jack:非常感謝。我現在不使用會話。 –

回答

1

通常在您使用會話時發生這種情況。看看這個post。如果您不需要會話 - 只需將其轉到下載頁面即可。或者,如果您需要它 - 在腳本開始時立即獲取所需的所有值,並立即關閉會話。這將允許執行另一個腳本。

+0

非常感謝您的鏈接。它解決了我的問題。 –