2011-07-28 10 views
2

Tumbrl APIを使用して私のホームページにいくつかの投稿を読み込んでいます。 私は次の呼び出しがあります。simplexml_load_fileのエラーチェックを挿入するにはどうすればよいですか?

$xml = simplexml_load_file($request_url); 

時折、それは罰金ロードが、他の回は、私が代わりにこの出力を得る:

Warning: simplexml_load_file(http://mysite.tumblr.com/api/read?type=post&start=0&num=10&type=photo) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable in mysite.com/html/index.php on line 624 

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://mysite.tumblr.com/api/read?type=post&start=0&num=10&type=photo" in mysite.com/html/index.php on line 624 

エラーチェックはどのような私は、ページ上の警告が表示されないようするために実装する必要がありますが?

答えて

5

この関数の失敗を確認する方法は、falseの戻り値をチェックすることです。

simplexml_load_fileは、古いスタイルのPHP警告が失敗したときに起動します。あなたは警告をオンにしていますが、何らかの理由で警告を抑制したい場合は、@を使用することができます。だから、

、あなたが

$element = @simplexml_load_file($file); 
if ($element === false) { 
    // error! 
} 

注意を使用することができます警告が可能な問題の指標となり得ることを。ファイルを読み込んでいてもそのファイルが存在するかどうかわからない場合は、セキュリティ上の問題を避けるよう注意してください。たとえば、ユーザーはシステム上の任意のファイルを読み取ることができますか?注意点として

アップデート2014年3月

、私はエラーを抑制するため、「@」演算子を使用すると、一般的に悪い考えであることを追加する必要があります。選択肢がある場合は、それを使用する必要があります。代替品がない場合は、 "@"で覆われている部分を可能な限り小さな部分に制限してください。

「@」は、コード内でerror_reporting()を設定したのと同じ方法で、グローバルに設定したエラー処理設定を上書きします。ですから、たとえばPHPを表示せずにエラーを記録するように設定した場合、このエラーは記録されません。また、間違って誤って "@"を使用するよりも多くのエラーを抑制することも簡単です。たとえば、@myfunction($something)を使用すると、その関数内のどこかで発生するエラーや、関数を呼び出している関数でエラーが発生するのが抑制されます。だから、これはその演算子について覚えておくだけのことです。

この場合、HTTP経由でリモートファイルをチェックしているため、通常の@を使用する代わりに理想的ではありません。例えば、ローカルファイルに対してあなたが避けるために、以下を使用することができ、「@」:

if (file_exists($file)) { 
    $element = simplexml_load_file($file); 
} 
else { 
    // error! 
} 

しかし、あなたのケースでは、HTTP経由でリモートファイルへの呼び出しであることから、上記の2つの要求の結果となり、最初の要求であれば2番目のものが失敗すると、エラーが発生します。あなたのケースでは、特にあなたのsimplexml_load_file()に限定された "@"演算子がおそらく最高です。

+0

「@」記号は私のためにここでそれをしました!ありがとう!!! – anna

+0

それも私のために働いた。ありがとう! –

+0

なぜエラーメッセージを処理するために '@'シンボルを使うのかについての素晴らしい説明。 'file_exists($ file)'は完全に動作します。ありがとう。 –

関連する問題