質問
file_get_contents をループで使用して URL を大量に取得していますが、常に 100 番目の URL の手前で停止し、次のメッセージが表示されます。「警告: file_get_contents(URL) [function.file-get-
content]: failed」ストリームを開くには: HTTP リクエストが失敗しました! HTTP/1.0 500 Read timed out
in D:websiteextra.php on line
プログラムの先頭に set_time_limit(0); が表示されています。上記のエラーは何でしょうか?理由は何ですか?
回答
set_time_limit は、PHP プログラムのタイムアウトのみを設定し、URL を読み取る file_get_contents 関数のタイムアウトは設定しません。
警告メッセージから判断すると、クロールされた Web ページでサーバー 500 エラーが発生しました。プログラムがタイムアウトした可能性があります。
file_get_contents のタイムアウトを変更したい場合は、リソース $context のタイムアウト パラメーターを使用できます:
コードをコピーします コードは次のとおりです:
$opts = array(
'http'= >array(
'method' =>"GET",
'timeout'=>60,
)
);
$context = stream_context_create($opts);
$html =file_get_contents('http:// www.example.com', false , $context);
fpassthru($fp);
このように、十分に注意していれば、readfile 関数のタイムアウトは 10 秒に設定されています。最初の次元の http は指定されたネットワーク プロトコルで、2D のメソッドは HTTP リクエスト メソッド get、post、head などを指し、timeout はタイムアウトです。この関数は非常に簡単に使用できるため、多くの人が PHP の組み込み関数 file_get_contents を使用して Web ページをダウンロードすると思います。リンクを渡すだけで自動的に取得リクエストを送信し、Web コンテンツをダウンロードできるので、多くの人が非常に簡単に使用しています。 POST リクエストの使用、プロキシ ダウンロードの使用、ユーザー エージェントの定義など、より複雑な状況がある場合、多くの人は、この関数ではそのようなことはできないと考え、これを実現するために、curl などの他の方法を選択するでしょう。それ。実際、file_get_contents はこれらのことも行うことができます。
は 3 番目のパラメーター を通じて http リクエストのコンテキストを設定します。
サポートされている設定と使用法については、公式の手順を参照してください: http://www.php.net/manual/en/context.http.php
添付ファイル: 現在、私が知っているそのサポート コンテキストについての PHP 組み込み関数は、パラメータは file_get_contents、file_put_contents、readfile、file、fopen、copy (このタイプの関数はサポートされていると推定されていますが、確認は必要です)。
コードをコピーします コードは次のとおりです:
function Post($url, $post = null)
{
$context = array();
if (is_array($post))
{
ksort($ post);
$context['http'] = array
(
'timeout'=>60,
'method' => 'POST',
'content' => http_build_query($post , '', '&'),
);
}
return file_get_contents($url, false, stream_context_create($context));
}
$data = array
(
'name' => 'test',
'email' => 'test@gmail.com',
'submit' => 'submit',
);
echo Post('http://www.yifu.info', $data);
OK、上記の関数は完璧で、タイムアウト制御とポスト値転送の両方を解決します。 Kangsheng の改良版 RC4 暗号化および復号化アルゴリズムと組み合わせることで、安全性の高い Web サービスを構築することがはるかに簡単になります。
http://www.bkjia.com/PHPjc/327194.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/327194.html技術記事質問: file_get_contents を使用してループ内の多数の URL を取得していますが、常に 100 番目の URL の手前で停止し、「警告: file_get_contents(URL) [function.file-get-contents...
」 ] というプロンプトが表示されます。