ここではcURLソリューションに関するコードが必要だと思うので、私と共有します(PHPマニュアルとコメントとしていくつかのソースを混ぜて書かれています)。
いくつかの並列HTTPリクエスト(のドメイン$aURLs
)を実行し、各リクエストが完了すると応答を出力します(そして$done
、他の可能な用途のためにそれらを保存します)。
リアルタイムの印刷部分と過剰なコメントのため、コードは必要以上に長くなりますが、回答を編集して改善してください。
<?php
ini_set('output_buffering', 'off');
ini_set('zlib.output_compression', false);
ob_end_flush(); while (@ob_end_flush());
apache_setenv('no-gzip', true);
ini_set('zlib.output_compression', false);
header("Content-type: text/plain");
ini_set('implicit_flush', true);
ob_implicit_flush(true);
header('Cache-Control: no-cache');
$string=''; for($i=0;$i<1000;++$i){$string.=' ';} output($string);
function output($string){
ob_start();
echo $string;
if(ob_get_level()>0) ob_flush();
ob_end_clean();
flush();
}
function multiprint($aCurlHandles,$print=true){
global $done;
foreach($aCurlHandles as $url=>$ch){
if(!isset($done[$url])){
$html = curl_multi_getcontent($ch);
if($html){
$done[$url]=$html;
if($print) output("$html".PHP_EOL);
}
}
}
};
function full_curl_multi_exec($mh, &$still_running) {
do {
$rv = curl_multi_exec($mh, $still_running);
} while ($rv == CURLM_CALL_MULTI_PERFORM);
return $rv;
}
set_time_limit(60);
$aURLs = array("http://domain/script1.php","http://domain/script2.php");
$done=array();
$aCurlHandles = array();
$mh = curl_multi_init();
foreach ($aURLs as $id=>$url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$aCurlHandles[$url] = $ch;
curl_multi_add_handle($mh,$ch);
}
$active = null;
$mrc=full_curl_multi_exec($mh, $active);
while($active && $mrc == CURLM_OK) {
if($descriptions=curl_multi_select($mh,1) != -1) {
usleep(500);
$mrc=full_curl_multi_exec($mh, $active);
multiprint($aCurlHandles);
}
}
foreach ($aCurlHandles as $url=>$ch) {
curl_multi_remove_handle($mh, $ch);
}
curl_multi_close($mh);
?>
CURL
...火災の要求に及びウェブからいくつかのデータをフェッチ