PHPでマルチcURLを使用すると、複数のHTTPリクエストを同時に送信することができます。マルチcURLセッションに個々のcURLハンドルを追加するために使用される関数がcurl_multi_add_handleです。
基本的な使い方
curl_multi_add_handle関数は、以下のように使用します:
curl_multi_add_handle($mh, $ch);
ここで、以下の引数が必要です:
- $mh: マルチcURLハンドル(curl_multi_initで初期化されたもの)。
- $ch: 個々のcURLハンドル(curl_initで初期化されたもの)。
例:マルチcURLセッションの使用
以下は、複数のURLに対して同時にリクエストを送信する例です:
// マルチcURLハンドルを初期化
$mh = curl_multi_init();
// 個々のcURLハンドルを初期化
$urls = array(
'http://example.com',
'http://example.org',
'http://example.net'
);
$handles = array();
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
// マルチcURLハンドルに個々のcURLハンドルを追加
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
// マルチcURLセッションを実行
$active = null;
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh);
}
} while ($active && $status == CURLM_OK);
// 各ハンドルのレスポンスを取得
foreach ($handles as $ch) {
$response = curl_multi_getcontent($ch);
echo "Response from " . curl_getinfo($ch, CURLINFO_EFFECTIVE_URL) . ":\n";
echo $response . "\n\n";
// cURLハンドルを閉じる
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
// マルチcURLハンドルを閉じる
curl_multi_close($mh);
注意点
- マルチcURLハンドルの初期化: curl_multi_initを使用してマルチcURLハンドルを初期化する必要があります。
- 個々のcURLハンドルの追加: curl_multi_add_handleを使用して個々のcURLハンドルをマルチcURLハンドルに追加します。
- マルチcURLセッションの実行: curl_multi_execとcurl_multi_selectを使用してマルチcURLセッションを実行します。
- レスポンスの取得: 各ハンドルのレスポンスを取得するために、curl_multi_getcontentを使用します。
- ハンドルの削除と閉じる: 各ハンドルをマルチcURLハンドルから削除し、個々のcURLハンドルを閉じるために、curl_multi_remove_handleとcurl_closeを使用します。
まとめ
curl_multi_add_handle関数は、複数のHTTPリクエストを同時に送信するための強力なツールです。マルチcURLセッションを使用することで、パフォーマンスが向上し、複数のリソースに対して効率的にアクセスすることができます。適切なオプションの設定とエラー処理を行うことで、安定したアプリケーションを構築することが可能です。