[PHP]curl_multi_add_handle関数:マルチcURLセッションにハンドルを追加する

PHP

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セッションを使用することで、パフォーマンスが向上し、複数のリソースに対して効率的にアクセスすることができます。適切なオプションの設定とエラー処理を行うことで、安定したアプリケーションを構築することが可能です。

タイトルとURLをコピーしました