2013-05-14 111 views
4

這裏是我的代碼使用PHP cURL可以獲得部分響應嗎?

$url = "partial_response.php"; 
$sac_curl = curl_init(); 
curl_setopt($sac_curl, CURLOPT_HTTPGET, true); 
curl_setopt($sac_curl, CURLOPT_URL, $url); 
curl_setopt($sac_curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($sac_curl, CURLOPT_HEADER, false); 
curl_setopt($sac_curl, CURLOPT_TIMEOUT, 11); 
$resp = curl_exec($sac_curl); 
curl_close($sac_curl); 
echo $resp; 

Partial_response.php

header('Content-type: text/html; charset=utf-8'); 
echo 'Job waiting ...<br />'; 
for($i = 0 ; $i &#60; 10 ; $i++) 
{ 
echo $i . '<br/>'; 
flush(); 
ob_flush(); 
sleep(1); 
} 
echo 'End ...<br/>'; 

從有關代碼我試圖從partial_response.php部分緩解。我想要的是,我需要curl來單獨返回「Job waiting ..」,而不是等待partial_response.php完成循環並返回整個數據。所以當我將CURLOPT_TIMEOUT降低到11以下時,我根本沒有得到任何迴應。請澄清我的疑問。 在此先感謝。

+0

我想這個問題並不是在*得到*響應的結尾,而是在*發送它的結尾。我認爲,自從你的'Partial_response.php'在執行結束時發送數據以來,你永遠不會以低超時獲得它(它不會達到它的結束,所以數據不會被髮送)。單獨嘗試'flush()'函數或與'CURLOPT_WRITEFUNCTION'一起接收部分輸出。 – Ranty 2013-05-14 22:52:01

回答

1

不,恐怕不是。至少不是我所知道的,這僅僅是因爲PHP是一種同步語言,這意味着你不能「跳過」任務。 (例如,curl_exec()將永遠 - 無論如何 - 直到請求完成後才執行)

+1

這很好,誰能告訴我有沒有其他方法來解決這個問題,使用PHP? – 2013-05-14 16:35:40

+1

這是不正確的。 Curl按迭代順序獲取數據,每個數據都返回一定數量的數據(如果考慮抓取大文件/頁面,這會變得很明顯)。您可以使用'CURLOPT_WRITEFUNCTION'來保存請求中的部分數據。 – Ranty 2013-05-14 22:49:22

+0

非常感謝它Ranty它工作! – 2013-05-15 07:05:25