現在の位置: ホーム> 最新記事一覧> 複数のリクエストが同時にあるときにcurl_multi_closeのスムーズな実行を確保する方法

複数のリクエストが同時にあるときにcurl_multi_closeのスムーズな実行を確保する方法

gitbox 2025-05-12

同時リクエストを行うとき、PHPのCurl拡張機能は、複数のHTTP要求を同時に送信し、プログラムの効率を向上させるのに役立ちます。ただし、複数のリクエストを処理する場合、リソースが適切にリリースされ、メモリリークを回避したり、リークを処理したりする方法が開発者の焦点となります。この記事では、 curl_multi_close関数を正しく使用してスムーズなリソースリリースを確保する方法に焦点を当てます。

1. curl_multi_close関数は何ですか?

curl_multi_close関数は、 Curlマルチハンドルを閉じて、それに関連するすべてのリソースをリリースするために使用されます。 curl_multi_initを使用して複数のハンドルを作成し、複数のリクエストを送信する場合、すべてのリクエストはそのハンドルを介して管理されます。メモリリークを回避するために、すべてのリクエストを完了した後、 curl_multi_closeを呼び出す必要があります。関連するリソースを解放する必要があります。

2。curl_multi_close使用する正しいプロセス

同時リクエストの過程で、通常、次の手順が関係します。

  1. 複数のカールセッションを初期化し、複数のハンドルに追加します。

  2. すべてのリクエストを実行し、それらが完了するのを待ちます。

  3. 各要求の応答データが正しく処理されていることを確認してください。

  4. curl_multi_close関数を使用してマルチハンドルを閉じ、リソースを解放します。

次に、基本的なコードの例は、 curl_multi_closeを正しく使用する方法を示しています。

 <?php
// 1. 初期化 cURL 複数のハンドル
$mh = curl_multi_init(); // 创建一个複数のハンドル

// 2. シングルを作成します cURL セッション并添加到複数のハンドル中
$ch1 = curl_init('http://gitbox.net/api/request1');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);

$ch2 = curl_init('http://gitbox.net/api/request2');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch2);

// 3. 複数のリクエストを実行します
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh); // リクエストが完了するのを待ちます
    }
} while ($active && $status == CURLM_OK);

// 4. 応答データを取得します
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// 5. 閉鎖 cURL セッション
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);

// 6. 無料のリソース
curl_close($ch1);
curl_close($ch2);

// 7. 閉鎖複数のハンドル
curl_multi_close($mh);

echo "聞く1応答: " . $response1 . "\n";
echo "聞く2応答: " . $response2 . "\n";
?>

3。注意すべきこと

  • リソースリリース順序:閉じる前に、個々のカールセッションを複数のハンドルから必ず削除してください。それ以外の場合、ハンドルが誤ってリリースされ、メモリリークが発生する可能性があります。

  • エラー処理curl_multi_execの実行中に、各リクエストの実行ステータスを確認することに注意する必要があります。要求が失敗した場合、エラーは時間内に処理され、対応するリソースをリリースする必要があります。

  • パフォーマンスの最適化:多数のリクエストがある場合は、不必要なブロッキングを最小限に抑えます。 curl_multi_selectによってCPU使用を減らすことができます。

4。概要

curl_multi_close関数の正しい使用は、同時リクエストでリソースを解放するために重要です。上記のプロセスに従うことにより、各カールハンドルと複数のハンドルが正しく閉じられてリリースされるようにし、メモリの漏れを避けるだけでなく、プログラムの安定性とパフォーマンスを改善します。特に並行性の高いシナリオでは、リソースの合理的な管理により、コードの堅牢性が大幅に向上します。