2011-07-16 7 views
13

HTTPレスポンスコードが404であっても、PHPを使用してURLのコンテンツをダウンロードしたいのですが、file_get_contentsがエラーになり、できませんでしたGoogleを使って答えを見つけましょう。これどうやってするの?PHPでURLの内容をダウンロードしても404

答えて

2

代わりにcURLを使用してください。これにより、より多くの制御が可能になり、検索されたコンテンツやステータスコードを読むことができます。

61

あなたはエラーを無視するconfigure the stream wrapperにあります

IGNORE_ERRORSbooleanても、障害ステータスコード上のコンテンツを取得します。言い換えればFALSE

デフォルトは、

echo file_get_contents(
    'http://stackoverflow.com/foo/bar', 
    false, 
    stream_context_create(
     array(
      'http' => array(
       'ignore_errors' => true 
      ) 
     ) 
    ) 
); 

を行うと、あなたは、404ページを取得します。

あなたは、これはHTTPストリームのデフォルトの動作になりたい場合は、HTTPストリームラッパーを使用して

stream_context_set_default(
    array('http' => array(
     'ignore_errors' => true) 
    ) 
); 

を使用するすべての呼び出しは、例えば、その後、これらの設定を使用しますあなたもresponse headerを取得したい場合は、単純に呼び出した後

print_r($http_response_header); 

を行い、

echo file_get_contents('http://stackoverflow.com/foo/bar'); 

を行うことができます。この変数は、各呼び出しの後にhttpストリームラッパーで(再)設定されます。

+0

興味深いアプローチ:のfile_get_contents()の呼び出しの前にエラー制御演算子(すなわち、@)を置くことによって警告を抑止 - しかし、あなたはエラーや成功した応答を持っているかどうかを知ることができますか? – sagi

+0

@sagi応答コードは '$ http_reponse_header'にあります。 – Gordon

+1

+1 Gordonが正しいです。変数$ http_response_headerには、明らかにステータスコードが含まれているスズについての情報が含まれています。 –

0

ステップ1: $content = file_get_contents("websitelink"); if($content === FALSE) { // handle error here... }

ステップ2:リターンコードをチェック$content = @file_get_contents($site);

関連する問題