DOMDocument クラスを使用して XML ファイルをロードするときに出力される警告の出力を抑制するサンプルを掲載しています。望まない警告メッセージの出力を抑制する一般的なサンプルです。DOMDocument クラス以外でも適用することができます。
スポンサーリンク
DOMDocument::load で警告メッセージが出力される
XML の内容が正常であれば XML をロードした DOMDocument クラスインスタンスをリターンし、 XML フォーマットに準拠していない場合は false をリターンするサンプルコードです。しかし、XML 形式ではないファイルの場合に警告が出力されます。(小さな親切大きなお世話的な・・・)
public function createDOMDocument($xml)
{
$dom = new DOMDocument();
if(file_exists($xml)) {
$ret = $dom->load($xml); // ファイルの場合
} else {
$ret = $dom->loadXML($xml); // 文字列の場合
}
if($ret === false) {
return false;
}
return $dom
}
出力される警告メッセージ例
Warning: DOMDocument::load() [domdocument.load]: Start tag expected, ‘<‘ not found in file ・・・
警告が出力されることは PHP マニュアルにも記載されています
警告メッセージの出力を抑制する
警告メッセージが出力されることを望まないケースも往々にしてあると思いますので、以下のように error_reporting 関数を使用して一時的に出力レベルを制御することで、メッセージを出力を抑制することができます。
public function loadMessageFile($xml)
{
$dom = new DOMDocument();
// 現在の出力レベルを取得し、警告を表示させないように設定する
$level = error_reporting();
error_reporting($level & ~(E_WARNING));
if(file_exists($xml)) {
$ret = $dom->load($xml); // ファイルの場合
} else {
$ret = $dom->loadXML($xml); // 文字列の場合
}
// 出力レベルを元に戻す
error_reporting($level);
if($ret === false) {
return false;
}
return $dom
}