現在の位置: ホーム> 最新記事一覧> PHPのcurl_multi_select()関数の詳細な説明: 同時リクエストの完了を効率的に待機します。

PHPのcurl_multi_select()関数の詳細な説明: 同時リクエストの完了を効率的に待機します。

M66 2025-10-10

PHP関数curl_multi_select()の概要

PHP 開発では、cURL ライブラリを使用して HTTP リクエストを行うのが一般的な方法です。プロジェクトで複数の HTTP リクエストを同時に処理する必要がある場合、curl_multi シリーズの関数を使用すると実行効率が効果的に向上します。現在アクティブな cURL 転送が完了するのを待つために、 curl_multi_select()関数を使用して、より効率的な待機メカニズムを実装できます。

関数定義

<span class="fun">curl_multi_select(リソース $mh[, float $timeout])</span>

パラメータの説明

  • $mh : 待機する cURL バッチ ハンドル。
  • $timeout : 待機時間の制限 (単位: 秒) を示すオプションのパラメーター。 0 に設定すると、すぐに戻ります。

機能効果

curl_multi_select()関数は、現在アクティブな cURL 転送が完了するのを待機し、読み取り可能なハンドルの数を返すために使用されます。この機能により、ネットワークの応答を待っている間もスクリプトをアクティブにしておくことができるため、全体的な実行効率が向上します。

サンプルコード

$mh = curl_multi_init();

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://example.com/api/request1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://example.com/api/request2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch2);

do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh); // 現在アクティブを待機中cURL転送完了
    }
} while ($active && $status == CURLM_OK);

// すべてのリクエストが処理された後,閉鎖cURLハンドル
foreach ([$ch1, $ch2] as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

コードの説明

上の例では、まずcurl_multiバッチハンドルを作成し、それに2つの独立したcurlリクエストを追加しました。次に、 curl_multi_exec()を使用して転送プロセスを実行し、 curl_multi_select()関数によって現在アクティブなリクエストが完了するのを待ちます。ループは、すべてのリクエストが処理されるまで継続します。最後に、関連するハンドルをすべてクリーンアップして閉じて、システム リソースを解放します。

使用方法の提案

curl_multi_select()を使用すると、同時 HTTP リクエストの処理パフォーマンスを大幅に向上させることができます。実際の開発では、スクリプトが無限待機状態にならないように、待機期間中にタイムアウトや例外を合理的に処理することをお勧めします。さらに、 curl_multi_info_read()関数を組み合わせて各リクエストの戻りステータスを取得し、より詳細なエラー処理を行うことができます。

要約する

curl_multi_select()は、複数のリクエストを同時に処理するための PHP の重要な関数の 1 つです。これを適切に使用することで、開発者はネットワーク応答を待機している間もスクリプトをアクティブにしておくことができるため、アプリケーションの応答効率とユーザー エクスペリエンスが大幅に向上します。