以前にcURLの例を書きましたが、もっと簡単なのはpecl-HTTPのHttpRequestPoolを使うことです。こっちの方が圧倒的に読みやすいのでおすすめ。
http://jp2.php.net/manual/ja/httprequestpool.construct.php
をベースにしていますが、cURLの例と同等になるように少しオプションを追加しています。
<?php
/**
* pecl-HTTPで並列リクエストを行うサンプル
*
*/
$urls = array(
'http://localhost/sleep.php?wait=1',
'http://localhost/sleep.php?wait=2',
'http://localhost/sleep.php?wait=3',
);
try {
$pool = new HttpRequestPool;
foreach ($urls as $u) {
$req = new HttpRequest($u);
$req->setOptions(array(
'timeout' => 10,
'connecttimeout' => 10
));
$pool->attach($req);
}
$pool->send(); //全リクエストが返ってくるまでブロックする
//レスポンスを解析。
foreach($pool as $req) {
echo $req->getUrl(), ':', $req->getResponseCode(), PHP_EOL;
echo $req->getResponseBody(), PHP_EOL;
}
} catch (HttpException $e) {
echo $e;
}
結果が返ってくるまでにそれぞれ1秒、2秒、3秒かかるAPIに同時リクエストしています。約3秒で処理が終わります。
Iteratorを実装していてforeachで全リクエストを操作できるなど、使いやすいインターフェースです。記述も短く、PHP5らしさの溢れる書き方ができます。
問題は共用レンタルサーバーでpecl-HTTPはあまり普及していない?ことでしょうか。