PHP 関数の紹介—curl_multi_select(): 現在アクティブな cURL 転送が完了するまで待ちます

王林
リリース: 2023-07-25 06:20:02
オリジナル
1344 人が閲覧しました

PHP 関数の概要—curl_multi_select(): 現在アクティブな cURL 転送が完了するまで待機します

はじめに

PHP では、cURL ライブラリを使用して HTTP リクエストを行うことは非常に一般的な操作です。複数の HTTP リクエストを同時に処理する必要がある場合、curl_multi ライブラリを使用してこれを実現できます。 curl_multi ライブラリを使用する場合、多くの場合、現在アクティブな cURL 転送が完了するまで待つ必要があります。このとき、curl_multi_select() 関数を使用できます。

関数定義

curl_multi_select(resource $mh[, float $timeout])

パラメータの説明

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

関数 function

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 転送を処理し、アクティブな転送があるかどうかを確認します。アクティブな転送がある場合は、curl_multi_select() 関数を呼び出して待機し、待機中に他のタスクを処理します。ループは、すべての転送が完了し、アクティブな転送がなくなるまで実行されます。

最後に、すべてのリクエストを処理した後、すべての cURL ハンドルとcurl_multi ハンドルを閉じます。

概要

curl_multi_select() 関数を使用すると、現在アクティブな cURL 転送が完了するのを待つことができます。これにより、待機中にスクリプトがアクティブな状態に保たれ、複数の HTTP リクエストの効率とパフォーマンスが向上します。

注: この関数を使用するときは、スクリプトが無限待機状態に陥らないように、エラーと例外が正しく処理されていることを確認してください。

以上がPHP 関数の紹介—curl_multi_select(): 現在アクティブな cURL 転送が完了するまで待ちますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート