2016-09-05 15 views
0

test.htmlで経由して完成されているので、結果をエコーする方法、demo言葉が含まのみ。は、1つのカール要求がPHPカールマルチスレッド

demo 

curl.php

<php? 

//init curl 
$chArr=[]; 
for($i=0;$i<500;$i++){ 
    $chArr[$i]=curl_init("http://dev.site/test.html"); 
    curl_setopt($chArr[$i],CURLOPT_RETURNTRANSFER,1); 
} 

//create curl 
$mh = curl_multi_init(); 
foreach($chArr as $k => $ch){ 
    curl_multi_add_handle($mh,$ch); 
} 

$running = null; 

do{ 
    curl_multi_exec($mh,$running); 
}while($running > 0); 

//start multi-thread 
foreach($chArr as $k => $ch){ 
    $result[$k]= curl_multi_getcontent($ch); 

    //and echo out the result 
    echo "$result[$k]\n"  

    curl_multi_remove_handle($mh,$ch); 
} 

curl_multi_close($mh); 

500リクエストを設定しました。約10秒後に出力があり、処理中に応答がありません。 no response


すべての単一のカール要求が行われているので、すぐ下のように、結果を表示し、私にフィードバックを与えるためにとにかくはありますか?

enter image description here


PS:PHPはので、これを行うことは困難であるならば、私はあなたがob_start()ob_end_flush()を使用する必要がありますNodejs、パイソンなど

+0

http://stackoverflow.com/a/35891746/1437261 – Gogol

答えて

0

を受け入れることができます。

ob_start()は出力バッファリングをオンにするため、出力をエコーする前にforループの先頭に配置します。

はob_end_flush()は、出力バッファを送信し、出力バッファリングをオフにします。

だからあなたのコードは次のようになります、

foreach($chArr as $k => $ch){ 
    ob_start(); 
    $result[$k]= curl_multi_getcontent($ch); 

    //and echo out the result 
    echo "$result[$k]\n"  
    ob_end_flush(); 
    curl_multi_remove_handle($mh,$ch); 
} 
+0

ごめん男、私はターミナル、しかし、私はまだ同じことを得る、と述べたもののようでしたすべての500回のカールが完了したときにのみ結果を表示します.1回のカール要求がすべて完了したので –

関連する問題