2015-05-31 95 views
2

我'嘗試通過服務器B,它具有代碼下載服務​​器C上一個文件(1GB):捲曲需要很長時間才能開始下載

header("Content-Disposition: attachment; filename=How to Use Git and GitHub Videos.zip"); 
header("Content-type: application/octet-stream"); 
header("Content-Transfer-Encoding: binary"); 

$url = "http://zips.udacity-data.com/ud775/How%20to%20Use%20Git%20and%20GitHub%20Videos.zip"; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_BUFFERSIZE, 256); 

curl_exec ($ch); 
curl_close($ch); 

我期待它會momentally開始dwonlaoding文件。但相反,我必須等待很長時間,直到我的瀏覽器窗口詢問保存位置。我認爲curl_setopt($ch, CURLOPT_BUFFERSIZE, 256);意味着它將通過塊傳輸文件塊,所以我不用等待它將首先讀取所有文件。

那麼,爲什麼需要這麼長的時間才能開始下載?我該如何解決它?如果這種方法是錯誤的,請建議我別的東西

回答

1

這是因爲curl_exec()塊,直到它完全讀取響應(消耗1GB的內存,在你的情況的過程)。你可以把它調用自己的功能,但是:

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $buffer) { 
    echo $buffer; 
    return strlen($buffer); 
}); 
curl_exec ($ch); // curl will call CURLOPT_WRITEFUNCTION as it receives data inside curl_exec() 

確保CURLOPT_RETURNTRANSFER未設置可言,既不是假的,既不爲true。

+0

感謝您的回覆,先生,我花了5小時,試圖解決這個任務,先生,請你能寫在這裏工作的解決方案。我不知道在哪裏粘貼你的代碼,以及在哪裏刪除'curl_exec()'。請先生 – onar

+0

馬立克,謝謝你的迴應,但它沒有幫助。它仍然等待將所有文件讀入內存。請看看這個問題[鏈接](http://stackoverflow.com/questions/30563782/php-curl-start-giving-data-to-browser-withut-waiting-to-read-all) – onar

相關問題