2009-08-31 20 views
1

私は基本的に複数のxmlファイルを連結するために使用されるページを持っており、それらを束ねる接着剤として機能します。ユーザがアクセスできるため、結合されているXMLファイルが整形されていない可能性があります。PHP - 式のセットでエラーや警告が発生しない場合は何かをしてください

ライブファイルを基本的に書き直そうとしています特定のコードセットに警告/エラーがスローされない場合。

これまでのところ、私が持っている:

try { 
    $first = simplexml_load_file('file.xml'); 
} catch (Exception $e) { 
    $write = false; 
} 

if (!$write) { 
// write to live file. 
} 

これは明らかに、エラー例外をキャッチし、時には呼び出しがそれ自体の警告ではなくエラーを返すことができる機能、私はエラーをキャッチするために何を使用することができ、基本的には場合にのみ、何の警告を書きませんし、 tryブロックにエラーがスローされましたか?スローされる警告の

例:

Warning: simplexml_load_file() parser error : Start tag expected, '<' 

答えて

4

読み込みに失敗した場合の他の「症状」を探してください。 simplexml_load_fileマニュアルエントリから:

戻る

値、XML文書内に保持されたデータを含むプロパティSimpleXMLElementクラスのオブジェクトを返します。 エラーの場合、FALSEを返します。だから、

は、このようにそれを使用します。

$first = simplexml_load_file('file.xml'); 

if ($first == false) { 
    echo "File couldn't be loaded"; 
    exit(); // abort normal program execution, redirect or what have you 
} 

// continue as normal 

ほぼすべての機能がエラーの場合falseのいくつかの並べ替えを返します。特別な場合を除いて、手動の "エラー解析"は使用しないでください。これはその1つではありません。

+0

ええ、これはインスタンスがたくさんある場合は面倒ですね。すべてのチェックを1つの式に組み合わせても私はパフォーマンスの問題も心配していません。 –

+0

+1良い答え。 –

+1

'if($ var == false)'が例外や出力バッファリングや文字列の解析の処理より面倒ですか?関数が有益に 'false'を返すなら、これははるかに簡単な方法です。これを複数回行う場合は、配列内のすべての結果を集め、最後に配列に 'false'エントリがあるかどうかを確認してください。またはループでそれを行う。 – deceze

3

いくつかのことは、このような状況のために気にしています。あなたは常に有効に警告(本番サーバのためのない素晴らしいアイデアを)持っているかどう任意のテキストがあった場合は、必ずチェックする出力バッファリング機能を使用することができます

ob_start(); 
... //code 
$str = ob_get_contents(); 
if (! empty($string)) 
{ 
    // a warning was thrown. 
} 

を送ったより良い方法は、警告のためdefine an error handlerにされ、

set_error_handler("my_warning_handler", E_WARNING); 

function my_warning_handler($errno, $errstr) { 
    // do something 
} 
1

エラーハンドラを設定し、そこから例外を発生させます。その後、いつものようにそれらをキャッチします。

関連する問題