2013-05-09 114 views
5

Curl有很多選項可以讓我的用例更容易地從另一臺服務器請求數據。我的腳本與代理類似,迄今爲止它正在向另一個服務器請求數據,一旦結果數據完成,它就立即發送給客戶端。PHP:捲曲和流轉發

  1. 用戶訪問http://te.st/proxy.php?get=xyz

  2. proxy.php從外部服務器下載XYZ

  3. 當下載完成100%時,將輸出數據

現在我想知道2和3是否也可以並行執行(使用php5-curl),就像一個「代理流」,它可以在不用等待的情況下即時轉發數據最後一行。

如果文件大小平均爲20MB,則會產生顯着差異。

捲毛中有這個選項嗎?

回答

6

看看http://www.php.net/manual/en/function.curl-setopt.php#26239

類似的東西(未測試):

function myProgressFunc($ch, $str){ 
    echo $str; 
    return strlen($str); 
} 

curl_setopt($ch, CURLOPT_WRITEFUNCTION, "myProgressFunc"); 

讀也ParallelCurl with CURLOPT_WRITEFUNCTION

+0

好,但不完美:它的緩衝。這意味着它可以用於文件流傳輸,但是當它是一個事件流時,最新的事件在curl內部無法訪問('flush()'無助於將它們全部回顯)。太可惜了。無論如何,你+1。 – user 2016-09-22 01:36:21

1

這裏是實際流,而不是等待完整的文件的代碼文件緩衝。

$url = YOUR_URL_HERE; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); 
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($curl, $data) { 
    echo $data; 
    ob_flush(); 
    flush(); 
    return strlen($data); 
}); 
curl_exec($ch); 
curl_close($ch);