現在の位置: ホーム> 最新記事一覧> curl_multi_closeの後にリソースクリーンアップの問題を正しくキャプチャする方法

curl_multi_closeの後にリソースクリーンアップの問題を正しくキャプチャする方法

gitbox 1970-01-01

PHPでCurlを使用する場合、 curl_multi_*関数は多くの場合、複数のCurl要求を同時に実行するために使用されます。効率的なコード実行を確保するには、特にcurl_multi_close関数を呼び出す場合、マルチスレッドCurlセッションを適切に閉じることが重要です。この記事では、 curl_multi_closeを正しく使用する方法を紹介して、リソースが徹底的にクリーニングされ、メモリリークやファイルハンドルリークを避けます。

curl_multi_closeとは何ですか?

PHPでは、 curl_multi_*関数を使用して、複数のCurlセッションを並行して管理します。 curl_multi_closeは、マルチスレッドCurlセッションを閉じて関連するリソースを解放するために使用される非常に重要な機能の1つです。その基本機能は、リソースの漏れを避けるために、 curl_multi_initで作成されたすべてのCurlセッションリソースを破壊することです。

curl_multi_closeを使用するための基本的な手順

  1. 複数のカールセッションを初期化します

    まず、 Curl_initで複数のCurlセッションを初期化し、 Curl_multi_handleに追加する必要があります。 curl_multi_init関数は、すべてのサブセッションを管理するCurlマルチハンドルを作成するために使用されます。

     $multi_handle = curl_multi_init();
    $ch1 = curl_init("https://gitbox.net/api/resource1");
    $ch2 = curl_init("https://gitbox.net/api/resource2");
    
    curl_multi_add_handle($multi_handle, $ch1);
    curl_multi_add_handle($multi_handle, $ch2);
    
  2. 複数のリクエストを実行します

    curl_multi_execを使用して、これらの要求を並行して実行します。すべてのリクエストが完了するまで機能は実行されます。

     do {
        $mrc = curl_multi_exec($multi_handle, $active);
    } while ($active);
    
  3. 複数のハンドルを閉じます

    すべてのCURLリクエストが完了した後、 CURL_MULTI_CLOSEを呼び出して複数のハンドルを閉じて、関連するすべてのリソースをリリースする必要があります。メモリリークを防ぐために、各ハンドルが閉じられていることを確認してください。

     curl_multi_remove_handle($multi_handle, $ch1);
    curl_multi_remove_handle($multi_handle, $ch2);
    
    curl_multi_close($multi_handle);
    

なぜcurl_multi_closeを使用する必要があるのですか?

curl_multi_closeを呼び出すことは、マルチスレッドリクエスト中に割り当てられたすべてのリソースを適切にリリースできることを保証するため、非常に重要です。 curl_multi_closeが呼び出されない場合、特に長期的なスクリプトまたはサービスでリソースの漏れを引き起こす可能性があります。システムリソースは継続的に消費され、システムパフォーマンスが低下します。

リソースを正しくクリーンアップする練習

  1. 個々のカールハンドルを閉じます

    複数のハンドルを閉じる前に、まずcurl_multi_remove_handleを介してすべてのクローンハンドルを削除し、次にcurl_multi_closeを呼び出す必要があります。

     curl_multi_remove_handle($multi_handle, $ch1);
    curl_multi_remove_handle($multi_handle, $ch2);
    curl_close($ch1);
    curl_close($ch2);
    
  2. アクティブなセッションがないことを確認してください

    curl_multi_closeを呼び出す前に、すべてのリクエストが完了し、 curl_multi_execの返品ステータスがcurlm_okであることを確認してください。これにより、リクエストが完了していないときにセッションを閉じようとすることができません。

     do {
        $mrc = curl_multi_exec($multi_handle, $active);
    } while ($active);
    
  3. 定期的にリソースを確認してください

    開発中は、特にループでCURLリソースが正しくリリースされているか、多数の同時リクエストを処理するときに定期的に確認することが重要です。過度のメモリ消費が遭遇した場合、 Memory_get_usage()などの関数を使用してトラブルシューティングを行うことができます。

要約します

curl_multi_closeの正しい使用は、PHPアプリケーションが効率的かつメモリフリーに実行されるようにするための重要なステップです。カールセッションの作成と破壊を適切に管理することにより、リソースの漏れの問題を効果的に回避できます。特に、複数の同時リクエストを処理する場合、複数のハンドルを正しく閉じると、システムの安定性とパフォーマンスが大幅に向上する可能性があります。