現在の位置: ホーム> 最新記事一覧> curl_multi_closeの使用例:同時HTTPリクエストを処理する方法

curl_multi_closeの使用例:同時HTTPリクエストを処理する方法

gitbox 2025-05-12

現代のWeb開発では、パフォーマンスの最適化は常に重要なトピックでした。特に、複数のHTTP要求を開始する必要がある場合、プログラムの応答速度とサーバーリソースの効率に同時に直接影響を与える方法が効率的に影響を与える方法。 PHPはCurl拡張機能を提供します。ここでは、 Curl_Multi_*シリーズ機能が開発者が同時に複数のリクエストを処理し、実行効率を大幅に改善することができます。

curl_multi_closeの使用について詳しく知り、それを実際の例と組み合わせて、同時のHTTP要求を正しく管理する方法を説明します。

PHPでは、 curl_multi_close()は、 curlマルチハンドルを閉じるために使用される関数です。 curl_multi_init()を使用してマルチハンドルを作成し、 curl_multi_add_handle()を介して同時処理のために複数の個別のcurlハンドルを追加する場合、最終的にcurl_multi_close()を呼び出して、メモリリークを防ぐためにリソースを解放する必要があります。

基本的な使用手順

同時リクエストの通常の完全なプロセスは次のとおりです。

  1. マルチハンドルを初期化します。

  2. 複数のCurl Easyハンドルを作成し、対応するURLとオプションを設定します。

  3. マルチハンドルに簡単なハンドルを追加します。

  4. マルチハンドルを実行します。

  5. それぞれの簡単なハンドルを取り外して閉じます。

  6. 最後に、マルチハンドルを閉じます( curl_multi_close()を使用)。

サンプルコード

curl_multi_close()を適切に使用して同時のhttpリクエストを管理する方法を示す完全な例を次に示します。

 <?php

// 要求される URL リスト
$urls = [
    'https://gitbox.net/api/data1',
    'https://gitbox.net/api/data2',
    'https://gitbox.net/api/data3',
];

// 初期化 multi handle
$multiHandle = curl_multi_init();
$curlHandles = [];

// 初期化每个 cURL easy handle,そして追加します multi handle
foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$i] = $ch;
}

// 埋め込む multi handle
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($running) {
        // アクティブな接続を待っています
        curl_multi_select($multiHandle);
    }
} while ($running > 0);

// 処理は結果を返します
foreach ($curlHandles as $ch) {
    $content = curl_multi_getcontent($ch);
    $info = curl_getinfo($ch);

    echo "聞く URL: " . $info['url'] . PHP_EOL;
    echo "HTTP ステータスコード: " . $info['http_code'] . PHP_EOL;
    echo "コンテンツに戻ります: " . substr($content, 0, 100) . "..." . PHP_EOL;
    echo str_repeat("-", 50) . PHP_EOL;

    // 取り外して閉じます easy handle
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// 閉鎖 multi handle
curl_multi_close($multiHandle);
?>

キーノート

  • すべての簡単なハンドルが削除されたら、 curl_multi_close()に電話してください。

  • curl_multi_close()を呼び出すのを忘れた場合、リソースはスクリプトの最後にPHPによって自動的にリリースされる場合がありますが、これは特に長期的なランニングまたは高電流環境では良い習慣ではありません。

  • curl_multi_close()は、追加された簡単なハンドルを自動的に閉じないため、マルチハンドルを閉じる前に、それぞれの簡単なハンドルを手動で取り外して閉じる必要があります。

まとめ

curl_multi_close()を適切に使用することにより、同時のHTTPリクエスト管理が効率的かつ安全であることを確認することができます。すべてのリクエストがcurl_multiで処理された後、すべてのハンドルリソースをクリーンアップして、プログラムを堅牢でパフォーマンスに保つようにしてください。