現在の位置: ホーム> 最新記事一覧> php curl_multi_setoptでcurlopt_returntransferパラメーターとその機能を正しく設定する方法は?

php curl_multi_setoptでcurlopt_returntransferパラメーターとその機能を正しく設定する方法は?

gitbox 2025-08-10

1。Curlopt_returntransferは何ですか?

curlopt_returntransferは、Curlライブラリのオプションであり、通常、Curlリクエストの戻り方法を設定するために使用されます。このオプションがtrueに設定されている場合、Curl要求の結果はブラウザまたはコンソールに直接出力されず、文字列として返されます。これにより、開発者は、CURLにコンテンツを直接表示する代わりに、PHPコードを介して返されたデータをキャプチャして処理できます。

基本的な使用法:

 <span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);
</span></span>

2. curlopt_returntransferをcurl_multi_setoptで使用します

curl_multi_execを使用して複数のCurl要求を実行する場合、通常、各リクエストに特定のオプションを設定する必要があります。現時点では、 curlopt_returntransferを含むcurl_multi_setoptを使用して、各curlセッションのオプションを設定できます。

サンプルコード:

 <span><span><span class="hljs-comment">// 複数を初期化します cURL セッション</span></span><span>
</span><span><span class="hljs-variable">$ch1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-string">"http://example.com"</span></span><span>);
</span><span><span class="hljs-variable">$ch2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_init</span></span><span>(</span><span><span class="hljs-string">"http://example.org"</span></span><span>);

</span><span><span class="hljs-comment">// 設定オプション</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_setopt</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>, CURLOPT_RETURNTRANSFER, </span><span><span class="hljs-literal">true</span></span><span>);

</span><span><span class="hljs-comment">// マルチスレッドを初期化します cURL セッション</span></span><span>
</span><span><span class="hljs-variable">$mh</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_init</span></span><span>();
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_add_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);

</span><span><span class="hljs-comment">// リクエストを実行します</span></span><span>
</span><span><span class="hljs-variable">$running</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-keyword">do</span></span><span> {
    </span><span><span class="hljs-title function_ invoke__">curl_multi_exec</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$running</span></span><span>);
} </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$running</span></span><span>);

</span><span><span class="hljs-comment">// 結果を取得します</span></span><span>
</span><span><span class="hljs-variable">$response1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_getcontent</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-variable">$response2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">curl_multi_getcontent</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>);

</span><span><span class="hljs-comment">// 出力結果</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$response1</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$response2</span></span><span>;

</span><span><span class="hljs-comment">// 閉鎖 cURL セッション</span></span><span>
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_remove_handle</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>, </span><span><span class="hljs-variable">$ch2</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_multi_close</span></span><span>(</span><span><span class="hljs-variable">$mh</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch1</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">curl_close</span></span><span>(</span><span><span class="hljs-variable">$ch2</span></span><span>);
</span></span>

この例では、各curlセッションのcurlopt_returntransferをtrueに設定して、各要求の応答データがブラウザまたはコンソールに直接出力されるのではなく、文字列として返されるようにします。これにより、複数のリクエストを処理する際に、各要求の応答コンテンツを収集できます。

3. curlopt_returntransferの役割

curlopt_returntransferの機能は、curl要求の出力動作を制御することです。

  • Trueに設定:返されたコンテンツは文字列として返され、開発者は返されたコンテンツ(解析、保存、出力など)をさらに処理できます。これは、ほとんどの場合、特に複数のリクエストを実行する場合に推奨される設定です。各リクエストの結果を処理する必要があります。

  • falseに設定: Curl要求は、コンテンツをブラウザまたはコンソールに直接出力します。この時点では、通常、単純なGETリクエストを使用したり、ファイルをダウンロードしたりする場合、コードで応答結果を直接キャプチャすることはできません。

4。curlopt_returntransfer設定に関するメモcurl_multi_setopt

  1. 各Curlハンドルを設定する必要があります。Curl_multi_setopt使用して複数のリクエストを処理する場合、個々のCurlハンドルをCurlopt_returntransferに設定する必要があります。このオプションは、コンテンツを返す必要がない場合でも、一部のリクエストに設定されています。

  2. 応答コンテンツの処理:マルチスレッドリクエストでは、通常、すべてのリクエストが実行された後、curl_multi_getContent()を介して各要求の応答コンテンツを取得する必要があります。リクエストが完了した後、各カールセッションの返品結果が処理されることを確認してください。

  3. デバッグ:マルチスレッドリクエストの返されたコンテンツの一部が期待を満たしていないことがわかった場合、 Curlopt_returntransferをfalsに一時的に設定して、Curl構成の問題によって引き起こされる例外であるかどうかを観察できます。

5。一般的なアプリケーションシナリオ

  • 複数のAPIの応答データを取得します。複数のAPI要求をセットアップし、それらを同時に実行すると、効率を大幅に改善できます。 curlopt_returntransferは、各リクエストの応答をキャプチャし、さらに処理を実行するために使用されます。

  • バッチダウンロードファイル:バッチでファイルをダウンロードするとき、 curlopt_returntransferを使用してファイルコンテンツを文字列またはバイナリストリームとして返すことができます。

  • クローラー:複数のWebページを同時にクロールする必要があるクローラーの場合、 curlopt_returntransferは非常に重要な構成であり、各リクエストのHTMLコンテンツをキャプチャするのに役立ち、それを解析し、保存します。

6。結論

curlopt_returntransferパラメーターを適切に設定することは、マルチスレッドCurlリクエストのスムーズな進行に重要です。このパラメーターをtrueに設定することにより、各要求の応答コンテンツを効果的にキャプチャしたり、プログラムにさらに処理したり、保存したりできます。 curl_multi_setoptを使用する場合は、効率的なデータ処理のために、このオプションがCurlハンドルごとに正しく設定されていることを確認してください。

実際の開発でこれらのオプションを理解し、柔軟に適用することで、同時リクエストを処理する際に、より良いパフォーマンスと制御を獲得することができます。