現在の位置: ホーム> 最新記事一覧> マルチスレッドリクエストが終了したときにcurl_multi_closeの前に返されたデータを処理する方法

マルチスレッドリクエストが終了したときにcurl_multi_closeの前に返されたデータを処理する方法

gitbox 2025-05-12

PHPでは、同時リクエストにCurlを使用することは、特に複数のHTTP要求を同時に発行する必要がある場合に一般的な慣行です。 curl_multi_* functionファミリは、 Curl_multi_closeを使用してマルチスレッドセッションを閉じるために使用される複数の同時リクエストを処理する方法を提供します。

ただし、通常、 curl_multi_closeを呼び出す前に、各要求の返品データを処理します。マルチスレッドセッションを閉じる前に、同時リクエストを処理して返されたデータを取得する一般的な方法を次に示します。

基本的な手順

  1. カールマルチスレッドセッションを初期化します

  2. マルチスレッドセッションにリクエストを追加します

  3. リクエストを実行します

  4. リクエスト結果を取得します

  5. セッションを閉じます

コードの例

<?php

// 複数を初期化します cURL ハンドル
$mh = curl_multi_init();

// 聞く URL リスト
$urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3"
];

// ストレージ cURL ハンドル
$curl_handles = [];
$responses = [];

foreach ($urls as $index => $url) {
    // 初期化 cURL セッション
    $ch = curl_init();

    // 設定 cURL 聞く选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // に追加 cURL 多线程セッション中
    curl_multi_add_handle($mh, $ch);

    // ストレージ每个ハンドル
    $curl_handles[$index] = $ch;
}

// 埋め込む所有聞く
$running = null;
do {
    // 埋め込む cURL 多线程聞く
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);  // 等待聞く完成
} while ($running > 0);

// 获取每个聞く的响应
foreach ($curl_handles as $index => $ch) {
    // 获取单个聞く的返回内容
    $response = curl_multi_getcontent($ch);
    
    // 処理返品データ
    $responses[$index] = $response;

    // シングルを閉じます cURL セッション
    curl_multi_remove_handle($mh, $ch);
}

// 電話 curl_multi_close 前に,你可以处理每个聞く的返回数据
foreach ($responses as $index => $response) {
    echo "Response from URL $index: " . substr($response, 0, 100) . "...\n";  // コンテンツの出力部分
}

// 关闭多线程セッション
curl_multi_close($mh);

?>

コード解析

  1. Curlセッションの初期化curl_multi_initを使用してマルチスレッドセッションを初期化します。これにより、複数のリクエストを同時に実行できます。

  2. リクエストの追加curl_initを介して単一のcurlセッションを作成し、各リクエスト( gitbox.netドメインでここで置き換えます)およびその他の関連オプション( curlopt_returntransferなど、応答を文字列として返す)のURLを設定します。

  3. 実行要求curl_multi_execを使用して並列リクエストを起動し、 curl_multi_selectを介してリクエストが完了するのを待ちます。

  4. 対応データを取得して処理するcurl_multi_getContentを使用して、各リクエストの返品コンテンツを取得し、 $ resesアレイに保存します。このステップでは、データの処理または出力操作を実行できます。

  5. セッションの終了:すべてのリクエストが完了したら、各Curlハンドルをcurl_multi_remove_handleから削除し、最後にcurl_multi_closeを呼び出してマルチスレッドセッションを閉じます。

要約します

curl_multi_close関数を呼び出す前に、すべての同時リクエストの返品データを正しく取得して処理したことを確認してください。これには、次の重要な手順が含まれます。

  • curl_multi_execを使用して、複数のリクエストを並行して実行します。

  • curl_multi_getContentを使用して、各リクエストの返されたコンテンツを取得します。

  • すべての回答が処理されたら、Curlセッションを閉じます。

この方法を使用すると、マルチスレッドセッションを閉じる前に、各リクエストの返品データを完全に処理できます。