ホームページ >バックエンド開発 >PHPチュートリアル >リクエストの早期終了を避けるために、PHP で Curl タイムアウトを効果的に微調整するにはどうすればよいですか?

リクエストの早期終了を避けるために、PHP で Curl タイムアウトを効果的に微調整するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-27 03:20:09693ブラウズ

How Can I Effectively Fine-Tune Curl Timeouts in PHP to Avoid Premature Request Termination?

PHP での Curl タイムアウトの微調整

PHP プログラミングの領域では、データベースの応答が遅いとイライラすることがあります。大規模なデータセットを扱う場合、このような遅さはさらに顕著になります。この問題に対処するために、開発者はタイムアウトを延長した CURL リクエストに依存することがよくあります。

次のコード スニペットを検討してください。

$ch = curl_init();
$headers["Content-Length"] = strlen($postString);
$headers["User-Agent"] = "Curl/1.0";

curl_setopt($ch, CURLOPT_URL, $requestUrl);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, 'admin:');
curl_setopt($ch,CURLOPT_TIMEOUT,1000);
$response = curl_exec($ch);
curl_close($ch);

問題は、指定されたタイムアウトにもかかわらず、CURL リクエストが途中で終了するときに発生します。 。この動作には、このアプローチに欠陥があるのではないかという疑問が生じます。

その答えは、curl で使用できる微妙な設定を理解することにあります。 CURLOPT_CONNECTTIMEOUT パラメータは、接続の確立に許可される時間を決定し、CURLOPT_TIMEOUT は、curl 関数の最大実行時間を設定します。この場合、問題はこれらの設定間の不一致が原因である可能性があります。

問題を解決するには、次のようにコードを調整します。

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds

CURLOPT_CONNECTTIMEOUT を 0 (無期限の待機を表す) に設定します。 )、接続が中断されることなく続行できるようにします。同時に、CURLOPT_TIMEOUT が 400 秒に設定され、リクエストが完了するまでに十分な時間が確保されます。

PHP スクリプトの実行時間を延長することも重要であることに注意してください。

set_time_limit(0);// to infinity for example

これにより、PHP スクリプトが確実に実行されます。途中で終了しないため、curl リクエストはそのまま実行できます。

以上がリクエストの早期終了を避けるために、PHP で Curl タイムアウトを効果的に微調整するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。