2017-06-02 70 views
0

我必須調用外部腳本,在該腳本中,我使用CURL首次調用以獲取需要大約2-3分鐘的數據,現在在此期間,我需要使用CURL進行其他外部呼叫以獲取第一個呼叫的進度。但問題是我的下一個呼叫等到第一個CURL的回覆來。我也檢查了curl_multi,但這也沒有幫助我,因爲當第一個通話正在進行時,我想撥打很多電話。所以任何人都可以幫助我解決它。當另一個curl調用正在進行中時,運行其他curl PHP

回答

1

我想的是,沒有必要進行第二次調用跟蹤捲曲進展。您可以通過使用CURL選項CURLOPT_PROGRESSFUNCTION和回調函數來達到相同效果。

的回調方法接受5個參數:

  1. 捲曲資源
  2. 預計將下載的下載
  3. 的字節數到目前爲止
  4. 預計的總字節數的總字節數已上傳
  5. 目前上傳的字節數

在回調方法中,您可以計算下載/上傳的百分比。下面給出一個例子:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "https://stackoverflow.com"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progress'); 
curl_setopt($ch, CURLOPT_NOPROGRESS, false); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$html = curl_exec($ch); 
curl_close($ch); 

function progress($resource,$download_size, $downloaded, $upload_size, $uploaded) 
{ 
    if($download_size > 0) 
     echo $downloaded/$download_size * 100 . "%\n"; 
    sleep(1); 
} 
+0

對不起,但這是差異。這不是我想要的捲曲進度,我想要的是第一個cal使得我需要顯示的百分比進行計算,因爲我確實需要進行第二次調用。那麼有什麼辦法可以做到嗎? –

+0

嗨@Dileep我嘗試了你要求的方法,但現在我陷入了類似的問題。在這裏,我在會話中存儲進度,並通過其他ajax調用我試圖獲取它,但另一個Ajax調用掛起(等待),直到整個Curl調用結束。任何解決方案? –

+0

嗨@Savan ajax基於進度監測這裏解釋http://www.binarytides.com/ajax-based-streaming-without-polling/。只有一個請求發送並分塊輸出以顯示請求進度。在這種情況下,您的回調方法會產生分塊輸出。 –

0

有辦法做到這一點 - 請參見下面的鏈接,他們解釋如何做到這一點使用curl_multi_init:php.net curl_multi_inithttp://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/

+0

你是對的他們顯示,但這是區別。在我的情況。在這裏,他們將所有請求添加到一起並調用捲曲。但在我的情況下,我必須用ajax調用第一次捲曲,這需要時間,現在在此期間我必須用ajax調用其他捲曲,這可以立即得到響應,並且不應該等待第一次調用完成。所以在我的情況下有2個差異。真正需要調用的就是這個問題。 –

+0

那麼PHP是不是真的被設計來處理多個線程... –

+0

所以你的意思是說有沒有其他的方式來做的PHP? –