ホームページ  >  記事  >  バックエンド開発  >  PHP ファイル_get_contents タイムアウト処理方法の設定_PHP チュートリアル

PHP ファイル_get_contents タイムアウト処理方法の設定_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:13:20764ブラウズ

file_get_contentsのタイムアウト処理

言い換えると、PHP5 から、file_get_content はすでにコンテキストをサポートしています (マニュアルには、「5.0.0 コンテキストのサポートが追加されました」と記載されています)。つまり、5.0 から、file_get_contents は実際にデータを POST できるようになりました。

今日私が話している記事はタイムアウトに関するものです。確かに、サーバー間で送信する場合、必ずタイムアウトが発生します。このときどうすればよいでしょうか? set_time_limit は役に立ちません。コンテキスト内のタイムアウト時間によってのみ制御できます。逆に、私たちは抑圧するのではなく、管理するのです。たとえば、タイムアウトによってエラーが返された後、js の settimeout と同様に、関数の再処理を試みます。エラーが 3 回または 5 回以上発生すると、サーバーに接続できないと考えて完全に諦めてしまうでしょう。これは良い方法なので、お勧めします。実は。すべての file_get_contents ではありませんが、コンテキストをサポートしている限り、タイムアウトや時間の無駄を避けるために追加する必要があります。この方法でサポートできる関数は大まかに次のとおりです。 fsocketopen (この関数の最後のパラメータ。ストリームを読み取るときの制御には stream_time_out 関数を使用することをお勧めします)、fopen (PHP5 からコンテキストのサポートも追加されました) )、ファイル (サポートは PHP5 で追加されました)、curl (curl には独自の変数 CURLOPT_TIMEOUT があります) など。

file_get_contents 関数を使用すると、タイムアウトが頻繁に発生します。この場合、エラー メッセージを確認して、エラーの種類を確認する必要があります。この場合、いくつかの方法を使用して最善を尽くしてください。回避または解決します。ここでは 2 つのタイプを簡単に紹介します:

1. タイムアウトの制限時間を増やします

ここで注意してください: set_time_limit は PHP プログラムのタイムアウトのみを設定し、URL を読み取る file_get_contents 関数のタイムアウトは設定しません。

当初、set_time_limit は file_get_contents にも影響を与えるのではないかと考えましたが、テストした結果、無効でした。 file_get_contents の遅延を実際に変更するには、リソース $context のタイムアウト パラメーターを使用できます:

コードをコピーします コードは次のとおりです。

$opts = array(
'http'=>array(
'method'=>"GET",
'timeout'=> 1,// 単位は秒
)
);

$cnt=0;
while($cntエコー $bb;

2. 一度遅れた場合は、さらに数回試してください

ネットワークやその他の要因が原因で失敗する場合もありますが、失敗した場合はプログラムを修正することができます。失敗した場合は file_get_contents() が FALSE を返すため、失敗する場合は諦めてください。 , したがって、次のようにコードを書くことができます:

コードをコピーします

コードは次のとおりです:$cnt=0; while($cnt


上記の方法はタイムアウトに対処するのに問題ありません。ポストはどうですか?気をつけてください、そして誰かが「メソッド」=>「GET」を発見しました、そうです!投稿するように設定できますか? Baidu で関連情報を検索したところ、本当に良かったです。そして、誰かが次のように post value 関数の模倣バージョンを作成しました:

コードをコピー

コードは次のとおりです:function Post($url, $post = null){ $context = array ()
if (is_array ( $post )) {
ksort ( $post ) ;
through ( $post, '', '&' )
'メール' => 'admin@admin.com',
'送信' => '送信',
);エコー投稿 ('http://www.jb51.net', $data );

OK、上記の関数は完璧で、タイムアウト制御とポスト値転送の両方を解決します。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/313508.html技術記事 file_get_contents のタイムアウト処理、PHP5 以降、file_get_content はすでにコンテキストをサポートしています (マニュアルには、5.0.0 コンテキストのサポートを追加しました。) つまり、5.0 から...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。