現在の位置: ホーム> 最新記事一覧> curl_multi_exec()を使用した後、curl_upkeep()を正しく呼び出す方法

curl_multi_exec()を使用した後、curl_upkeep()を正しく呼び出す方法

M66 2025-06-01

同時リクエストにcurl_multi_exec()を使用する場合、開発者は、特に複数のリクエストが関係する場合、要求プロセス中に関数が複雑になる可能性があることに気付くことがよくあります。現時点では、 curl_upkeep()が特に重要になります。この記事では、curl_multi_exec ()を使用した後にcurl_upkeep ()を呼び出す必要がある理由と、それを正しく実装する方法について説明します。

背景の紹介

PHPでは、 curl_multi_exec()関数は非常に便利なツールであり、複数のCurlセッションを同時に処理できるようにします。これは、複数のWebページデータのクロールやAPIリクエストの処理など、複数のHTTP要求を同時に実行する必要があるアプリケーションに非常に便利です。

ただし、 curl_multi_exec()自体は、セッションリソースの定期的な清掃やメンテナンスなど、いくつかの根本的な作業を処理しません。この時点で、 curl_upkeep()は重要な役割を果たし、Curlセッションの健全な状態を維持および管理するのに役立ちます。

なぜcurl_upkeep()を呼び出す必要があるのですか?

curl_multi_exec()が使用されると、各リクエストのステータスを同時にかつ継続的にチェックする複数のCurl要求を開始します。すべての要求が実行されると、 curl_multi_exec()は、操作が完了したかどうかを示すフラグを返します。

ただし、 curl_multi_exec()は、内部リソースを自動的にクリーンアップしません。 curl_upkeep()が定期的に呼び出されない場合、リソースの漏れを引き起こすか、セッションを正しく閉じることができない場合があります。 curl_upkeep()の主な機能は、パフォーマンスの問題やメモリの漏れを避けるために、これらのセッションリソースを定期的に処理およびクリーニングすることです。

curl_upkeep()をコードに実装する方法は?

実際のアプリケーションでは、 Curl_multi_exec()呼び出し中にCurl_upkeep()を定期的に実行する必要があります。以下は、 curl_multi_exec()curl_upkeep()を使用する一般的な例です。

 <?php

// 初期化 cURL リソース
$mh = curl_multi_init();

// 複数を保存する配列を定義します cURL セッション
$ch1 = curl_init('http://m66.net/api/endpoint1');
$ch2 = curl_init('http://m66.net/api/endpoint2');
$ch3 = curl_init('http://m66.net/api/endpoint3');

// それぞれを設定します cURL セッション的选项
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true);

// 意思 cURL セッション添加到 multi-handle
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
curl_multi_add_handle($mh, $ch3);

// 同時リクエストを実行します
do {
    $status = curl_multi_exec($mh, $active);
    // 定期的に実行します curl_upkeep() 来确保リソース被清理和管理
    curl_upkeep($mh);
} while ($active);

// 各リクエストの応答結果を取得します
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
$response3 = curl_multi_getcontent($ch3);

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

// 閉鎖 multi-handle リソース
curl_multi_close($mh);

?>

上記のコードの例では、3つのCurlセッションを初期化し、 curl_multi_exec()に追加して実行します。各ループで、 curl_upkeep()を呼び出して、リソースのクリーンアップとメンテナンスを確保します。

curl_upkeep()の役割

curl_upkeep()の関数には含まれますが、これらに限定されません。

  • 各カールセッションのステータスを確認して、リクエストが完了していることを確認してください。

  • 不必要なメモリまたはシステムリソースを避けるために、定期的にタイムアウトをクリーンアップするか、カールセッションを必要としなくなりました。

  • 実行中に適切なエラー処理とステータスの更新を実行します。

PHPのCurl拡張機能には明示的なcurl_upkeep()関数はありませんが、同時リクエストを実行する際にリソースを定期的に管理および浄化するよう開発者に思い出させるための概念としてのみ機能し、プログラムの堅牢性と効率を保証します。

要約します

curl_multi_exec()はPHPの非常に強力な同時リクエストツールですが、リクエストを同時に実行する場合、 curl_upkeep() (または同様のリソース管理メカニズム)を呼び出すことが非常に重要です。これにより、リソースリークやセッション管理の問題によりシステムがクラッシュしないようになり、プログラムの安定性とパフォーマンスが向上します。プログラムが効率的に実行されることを確認するために、同時リクエストを実行するときに、カールセッションが定期的にクリーニングおよび管理されていることを確認してください。