現在の位置: ホーム> 最新記事一覧> curl_multi_closeを使用して複数のCurl接続を正しく閉じる方法

curl_multi_closeを使用して複数のCurl接続を正しく閉じる方法

gitbox 2025-05-12

PHPでは、 curl_multi_*関数ファミリを使用して、複数のCurl要求を同時に実行します。 curl_multi_close()は、このシリーズの重要な機能であり、 curl_multi_init()によって初期化された複数のcurlハンドルを閉じます。

curl_multi_*関数シリーズとは何ですか?

curl_multi_* functionファミリは、複数のCurl要求を並行して処理するためのPHPのツールです。次の要求を送信する前に、各リクエストが完了するのを待つことなく、複数のHTTP要求を同時に送信できます。このようにして、特に複数のAPIまたはWebサイトを要求する必要がある場合、複数のリクエストを大幅に処理できます。

一般的なcurl_multi_*関数は次のとおりです。

なぜcurl_multi_close()を使用するのですか?

Curl_multi_*関数を使用して複数のCurl要求が実行されると、各要求は独立しており、各リクエストには独自のリソース消費があります。リクエストが完了した後にこれらのリソースを時間内にリリースできるようにするために、 CURL_MULTI_CLOSE()を呼び出して接続を閉じる必要があります。

curl_multi_close()を使用しない場合、これらのCurlハンドルはメモリやその他のリソースを引き続き取り上げて、パフォーマンスの問題やメモリリークさえも引き起こす可能性があります。したがって、リクエストが完了した後、これらの接続を適切に閉じることが非常に重要です。

curl_multi_close()使用の例

Curl_multi_close()を使用して複数のCurl接続を閉じる方法を示す例を示します。

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

// 要求するものを定義します URL リスト
$urls = [
    "https://gitbox.net/api/endpoint1",
    "https://gitbox.net/api/endpoint2",
    "https://gitbox.net/api/endpoint3"
];

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

// それぞれを作成します cURL ハンドル并添加到 multi ハンドル中
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $ch_handles[] = $ch;
}

// 複数のリクエストを実行します
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// 各リクエストのコンテンツを取得して閉じます cURL ハンドル
foreach ($ch_handles as $ch) {
    $content = curl_multi_getcontent($ch);
    echo $content . "\n"; // 返されたコンテンツを出力します
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch); // それぞれを閉じます cURL ハンドル
}

// 閉鎖 multi ハンドル
curl_multi_close($mh);
?>

コード解析

  1. 複数のカールハンドルを初期化します

    • curl_multi_init()を使用して、複数のCurl要求を管理する新しいマルチハンドルを作成します。

  2. 複数のカールハンドルを追加します

    • 各URLのCurlハンドルを作成し、関連するオプションを設定し、 curl_multi_add_handle()を介してこれらのハンドルをマルチハンドルに追加します。

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

    • curl_multi_exec()を使用して、すべてのリクエストが完了するまですべてのリクエストを実行します。

  4. コンテンツを取得してハンドルを閉じます

  5. マルチハンドルを閉じます

    • 最後に、 curl_multi_close()を呼び出して、マルチハンドルを閉じて、すべてのリソースを解放します。

まとめ

curl_multi_close()の正しい使用は、複数のCurl要求リソースがタイムリーにリリースされることを保証するための重要なステップです。複数のリクエストを並行して処理する場合は、各リクエストが実行されて、関連するすべてのCurl接続を閉じる後、 curl_multi_close()を呼び出すことを忘れないでください。これにより、メモリリークが防止されるだけでなく、コードの効率も向上します。