PHP リモート ファイルを取得します
if(!($contents=file_get_contents('http://finance.yahoo.com/d/quotes.csv?s=AMZN&e=.csv&f=slldltlcohgv'))){
die ('fail to open yahoo');
};
echo $contents;
成功するまでに平均 3 ~ 4 回の更新が必要で、警告が表示されるのはなぜですか他のケースでは HTTP リクエストが失敗しました!
-----解決策---------
バート・フリーデリヒス 2012年4月16日 12:17 file_get_contents は POST を実行でき、最初にそのためのコンテキストを作成します。 $opts = array('http' => 配列( 'メソッド' => 'POST', 'header' => "コンテンツタイプ: text/xmlrn"。 "認可: 基本 ".base64_encode("$https_user:$https_password")."rn", 'コンテンツ' => $body, 'タイムアウト' => 60 ) ); $context = stream_context_create($opts); $url = 'https://'.$https_server; $result = file_get_contents($url, false, $context, -1, 40000); ペペレグリナ 2011年12月21日 11:30 get_file_contents(url) を試行する際にこの問題が発生する場合: 警告: file_get_contents(url): ストリームを開けませんでした: yy 行目の xx で HTTP リクエストが失敗しました。 SonicWall ファイアウォールの内側にいる場合は、これをお読みください。 https://bugs.php.net/bug.php?id=40197 (この短い行: ファイアウォールの内部設定で、「CFS に対してホスト タグ検索を強制する」というラベルの付いたボックスのチェックを外します) どうやらデフォルトでは、SonicWall は「Host:」ヘッダーのない HTTP リクエストをブロックします。これは、PHP get_file_contents(url) 実装の場合に当てはまります。 これが、cURL wget を使用して同じマシンから同じ URL を取得しようとすると、機能する理由です。 これが誰かの役に立つことを願っています、私はそれを見つけるのに何時間もかかりました:) godwraith01 ヤフードットコム 11-Oct-2011 04:16 一部のサーバー宛先でストレート IP の代わりにホスト名を使用すると問題が発生しました。 file_get_contents("www.jbossServer.example/app1",...) を使用すると 呼び出しているサーバーから「無効なホスト名」を取得します。 これは、おそらく file_get_contents が IP を取得した後にリクエストを書き換えて、次と同じものを取得するためです。 file_get_contents("xxx.yyy.www.zzz/app1",...) また、リクエストで IP アドレス指定を行うと、多くのサーバーがアクセスを拒否することもご存知でしょう。 cURL では、この問題は存在せず、設定したとおりにホスト名が解決されるため、サーバーは <div class="clear"> に対して失礼な応答をしません。</div>