現在の位置: ホーム> 最新記事一覧> Curl_Closeを使用してPHPで複数のCurlリソースをリリースする方法は?

Curl_Closeを使用してPHPで複数のCurlリソースをリリースする方法は?

gitbox 2025-05-18

複数のCurl要求を同時に実行する必要がある場合は、 curl_multi_exec()関数を使用できます。この関数により、複数のカールセッションを同時に実行し、複数のハンドルでそれらを管理できます。

Curl_multi_exec()を使用して複数のCurlリクエストを処理する方法を示す基本的な例を次に示します。

 <?php
// 複数を作成します cURL ハンドル
$ch1 = curl_init("https://gitbox.net/api/data1");
$ch2 = curl_init("https://gitbox.net/api/data2");
$ch3 = curl_init("https://gitbox.net/api/data3");

// aを作成します cURL 多ハンドル
$multi_handle = curl_multi_init();

// シングルを置きます cURL ハンドル加入到多ハンドル中
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);
curl_multi_add_handle($multi_handle, $ch3);

// 複数を実行します cURL 聞く
$running = null;
do {
    curl_multi_exec($multi_handle, $running);
} while ($running > 0);

// 各個人を閉じます cURL ハンドル
curl_multi_remove_handle($multi_handle, $ch1);
curl_multi_remove_handle($multi_handle, $ch2);
curl_multi_remove_handle($multi_handle, $ch3);

// 閉鎖多ハンドル
curl_multi_close($multi_handle);

この例では、3つのCurlリクエストハンドルを作成し、 curl_multi_exec()を介して同時に実行します。 curl_multi_exec()は同時に複数のリクエストを実行できますが、リソースが適切にリリースされるようにcurl_multi_remove_handle()curl_multi_close()を使用する必要があることに注意してください。

2。curl_closeを正しく使用して、リソースをリリースします

各Curl要求が実行された後、 CURL_CLOSE()関数を使用して対応するリソースをリリースする必要があります。 curl_multi_close()はマルチハンドル接続全体を閉じますが、個別のCurlハンドルを自動的に閉じません。したがって、マルチタスク操作を完了した後、各カールハンドルを手動で閉じる必要があります。これらのリソースが正しくリリースされない場合、メモリリークが発生する可能性があります。

Curl_Close()を正しく使用して、各Curlハンドルの無料リソースを正しく使用する改良コードは次のとおりです。

 <?php
// 複数を作成します cURL ハンドル
$ch1 = curl_init("https://gitbox.net/api/data1");
$ch2 = curl_init("https://gitbox.net/api/data2");
$ch3 = curl_init("https://gitbox.net/api/data3");

// aを作成します cURL 多ハンドル
$multi_handle = curl_multi_init();

// シングルを置きます cURL ハンドル加入到多ハンドル中
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);
curl_multi_add_handle($multi_handle, $ch3);

// 複数を実行します cURL 聞く
$running = null;
do {
    curl_multi_exec($multi_handle, $running);
} while ($running > 0);

// 各個人を閉じます cURL ハンドル
curl_close($ch1);
curl_close($ch2);
curl_close($ch3);

// 閉鎖多ハンドル
curl_multi_close($multi_handle);

このようにして、各カール要求が完了した後、関連するリソースを時間内にリリースできるようにします。

3.メモリリークを避けるためのベストプラクティス

  1. 時間のリソースをリリースする:すべてのCurl要求が完了したら、 Curl_Close()に電話して、個々のCurlリソースをリリースし、最後に複数のハンドルを閉じてください。

  2. 適切なエラー処理:実際のプロジェクトでは、ネットワークリクエストが失敗する可能性があり、一部のカールハンドルが適切に閉じられていません。エラー処理メカニズムを追加して、リクエストが成功したかどうかに関係なく、リソースをリリースできることを確認できます。例えば:

     if ($ch1) {
        // 如果聞く成功,閉鎖 cURL リソース
        curl_close($ch1);
    }
    
  3. メモリの使用量を監視する:複数の同時Curl要求を処理する場合、PHPのメモリ使用量を監視して、メモリリークが発生しないようにすることができます。一部の複雑なアプリケーションでは、PHPメモリガベージのリサイクルを強制するためにgc_collect_cycles()を使用して、メモリの使用量を減らすのにも役立ちます。

  4. 同時リクエストの数を制限するcurl_multi_exec()は複数のリクエストを同時に実行できますが、過度の同時リクエストはシステムリソースの過度の消費につながる可能性があります。実際のアプリケーションでは、同時リクエストの数を適切に制限して、過度のカールリクエストがメモリを占領しすぎないようにすることができます。