1. ホーム
  2. php

[解決済み] DomDocument (PHP) で整形式でない HTML を読み込む際の警告を無効化する。

2023-05-12 10:40:11

質問

HTMLファイルを解析したいのですが、整形式でないため、PHPが警告を出力してしまいます。このようなデバッグ/警告の動作をプログラムで回避したいのですが、どうすればよいでしょうか。アドバイスをお願いします。ありがとうございます。

コードです。

// create a DOM document and load the HTML data
$xmlDoc = new DomDocument;
// this dumps out the warnings
$xmlDoc->loadHTML($fetchResult);

これは

@$xmlDoc->loadHTML($fetchResult)

は警告を抑制することができますが、これらの警告をプログラムで捕捉するにはどうしたらよいでしょうか。

どのように解決するのですか?

一時的なエラーハンドラを設置するには set_error_handler

class ErrorTrap {
  protected $callback;
  protected $errors = array();
  function __construct($callback) {
    $this->callback = $callback;
  }
  function call() {
    $result = null;
    set_error_handler(array($this, 'onError'));
    try {
      $result = call_user_func_array($this->callback, func_get_args());
    } catch (Exception $ex) {
      restore_error_handler();        
      throw $ex;
    }
    restore_error_handler();
    return $result;
  }
  function onError($errno, $errstr, $errfile, $errline) {
    $this->errors[] = array($errno, $errstr, $errfile, $errline);
  }
  function ok() {
    return count($this->errors) === 0;
  }
  function errors() {
    return $this->errors;
  }
}

使用方法

// create a DOM document and load the HTML data
$xmlDoc = new DomDocument();
$caller = new ErrorTrap(array($xmlDoc, 'loadHTML'));
// this doesn't dump out any warnings
$caller->call($fetchResult);
if (!$caller->ok()) {
  var_dump($caller->errors());
}