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 のタイムアウト パラメーターを使用できます:
ネットワークやその他の要因が原因で失敗する場合もありますが、失敗した場合はプログラムを修正することができます。失敗した場合は file_get_contents() が FALSE を返すため、失敗する場合は諦めてください。 , したがって、次のようにコードを書くことができます:
コードをコピーしますOK、上記の関数は完璧で、タイムアウト制御とポスト値転送の両方を解決します。