PHPでは、 curl_multi_*関数ファミリを使用して、複数のCurl要求を同時に実行します。 curl_multi_close()は、このシリーズの重要な機能であり、 curl_multi_init()によって初期化された複数のcurlハンドルを閉じます。
curl_multi_* functionファミリは、複数のCurl要求を並行して処理するためのPHPのツールです。次の要求を送信する前に、各リクエストが完了するのを待つことなく、複数のHTTP要求を同時に送信できます。このようにして、特に複数のAPIまたはWebサイトを要求する必要がある場合、複数のリクエストを大幅に処理できます。
一般的なcurl_multi_*関数は次のとおりです。
curl_multi_init() :複数のCurlハンドルを初期化します。
curl_multi_add_handle() :マルチハンドルに単一のカールハンドルを追加します。
curl_multi_exec() :複数のCurl要求を実行します。
curl_multi_getContent() :curlハンドルの内容を取得します。
curl_multi_close() : curl_multi_init()によって作成されたマルチハンドルを閉じて、すべてのリソースを無料で送信します。
Curl_multi_*関数を使用して複数のCurl要求が実行されると、各要求は独立しており、各リクエストには独自のリソース消費があります。リクエストが完了した後にこれらのリソースを時間内にリリースできるようにするために、 CURL_MULTI_CLOSE()を呼び出して接続を閉じる必要があります。
curl_multi_close()を使用しない場合、これらのCurlハンドルはメモリやその他のリソースを引き続き取り上げて、パフォーマンスの問題やメモリリークさえも引き起こす可能性があります。したがって、リクエストが完了した後、これらの接続を適切に閉じることが非常に重要です。
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);
?>
複数のカールハンドルを初期化します:
curl_multi_init()を使用して、複数のCurl要求を管理する新しいマルチハンドルを作成します。
複数のカールハンドルを追加します:
各URLのCurlハンドルを作成し、関連するオプションを設定し、 curl_multi_add_handle()を介してこれらのハンドルをマルチハンドルに追加します。
リクエストを実行します:
curl_multi_exec()を使用して、すべてのリクエストが完了するまですべてのリクエストを実行します。
コンテンツを取得してハンドルを閉じます:
curl_multi_getContent()を使用して、各curlハンドルによってコンテンツを返します。完了したら、 curl_multi_remove_handle()を介してマルチハンドルからハンドルを取り外し、 curl_close()を使用して個々のcurlハンドルを閉じます。
マルチハンドルを閉じます:
最後に、 curl_multi_close()を呼び出して、マルチハンドルを閉じて、すべてのリソースを解放します。
curl_multi_close()の正しい使用は、複数のCurl要求リソースがタイムリーにリリースされることを保証するための重要なステップです。複数のリクエストを並行して処理する場合は、各リクエストが実行されて、関連するすべてのCurl接続を閉じる後、 curl_multi_close()を呼び出すことを忘れないでください。これにより、メモリリークが防止されるだけでなく、コードの効率も向上します。