PHPリクエストインターフェースのタイムアウトを解決する方法

王林
リリース: 2023-02-25 16:38:02
オリジナル
6220 人が閲覧しました

PHPリクエストインターフェースのタイムアウトを解決する方法

[HTTP アクセス]

通常、私たちはさまざまな方法で HTTP にアクセスします。主に、curl、socket、file_get_contents() などのメソッドです。

相手のサーバーが応答しなかったら悲惨なことになりますが、サーバーごと強制終了することも簡単なので、http アクセス時のタイムアウトの問題も考慮する必要があります。

[CURL アクセス HTTP]

CURL は、HTTP プロトコル インターフェイスにアクセスするために一般的に使用される信頼性の高い lib ライブラリです。高いパフォーマンスといくつかの同時実行サポートを備えています。関数、等

CURL:

curl_setopt($ch, opt) は、主に次のようないくつかのタイムアウト設定を設定できます。

CURLOPT_TIMEOUT Set cURL の実行が許可される最大秒数。

CURLOPT_TIMEOUT_MS cURL の実行が許可される最大時間をミリ秒単位で設定します。 (cURL 7.16.2 で追加。PHP 5.2.3 から利用可能。)

CURLOPT_CONNECTTIMEOUT 接続を開始するまでの待機時間。0 に設定すると、無期限に待機します。

CURLOPT_CONNECTTIMEOUT_MS 接続試行を待機する時間 (ミリ秒単位)。 0 に設定すると、無限に待機します。 cURL 7.16.2 で追加されました。 PHP 5.2.3 以降で利用可能です。

CURLOPT_DNS_CACHE_TIMEOUT DNS 情報をメモリに保存する時間を設定します。デフォルトは 120 秒です。

curl の通常の第 2 レベルのタイムアウト:

$ch =curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_TIMEOUT, 60); //設定する必要があるのは秒数のみです

curl_setopt( $ ch, CURLOPT_HTTPHEADER, $headers);

curl_setopt($ch, CURLOPT_USERAGENT, $define_vars['HTTP_USER_AGENT']);

curl の通常の第 2 レベルのタイムアウトの使用法:

curl_setopt($ch, CURLOPT_TIMEOUT, 60);

curl でミリ秒のタイムアウトが必要な場合は、次を追加する必要があります:

curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1L );

Or:

curl_setopt ($ch, CURLOPT_NOSIGNAL, true); ミリ秒レベルのタイムアウト設定をサポートできます

curl のミリ秒タイムアウトの例:

<?php
if (!isset($_GET[&#39;foo&#39;])) {
    
// Client
    $ch = curl_init(&#39;http://example.com/&#39;);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOSIGNAL, 1);  
//注意,毫秒超时一定要设置这个
    curl_setopt($ch, CURLOPT_TIMEOUT_MS, 200); 
//超时毫秒,cURL 7.16.2中被加入。从PHP 5.2.3起可使用
    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
 
    if ($curl_errno > 0) {
        echo "cURL Error ($curl_errno): $curl_error\n";
    } else {
        echo "Data received: $data\n";
    }
} else {
    
// Server
    sleep(10);
    echo "Done.";
}
?>
ログイン後にコピー

その他のヒント:

1. 経験によると、要約は次のとおりです: cURL バージョン >= libcurl /7.21. バージョン 0 では、ミリ秒のタイムアウトが確実に有効になることを覚えておいてください。

2.curl_multi のミリ秒タイムアウトにも問題があります。 。 1 回のアクセスでミリ秒レベルのタイムアウトがサポートされますが、複数の呼び出しが並行して行われる場合、curl_multi は不正確になります。

[ストリーム処理による HTTP へのアクセス]

また、curl では HTTP プロトコルの処理に fsockopen やファイル操作関数を使用することが多いため、これに対するタイムアウト処理も必要です。

推奨チュートリアル: PHP ビデオ チュートリアル

以上がPHPリクエストインターフェースのタイムアウトを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!