Обработка ошибок PHP DOMDocument

В моем приложении я загружаю xml из url, чтобы разобрать его. Но иногда этот URL-адрес может быть недействительным. В этом случае мне нужно обрабатывать ошибки. У меня есть следующий код:

$xdoc = new DOMDocument(); try{ $xdoc->load($url); // This line causes Warning: DOMDocument::load(...) // [domdocument.load]: failed to open stream: // HTTP request failed! HTTP/1.1 404 Not Found in ... } catch (Exception $e) { $xdoc = null; } if($xdoc == null){ // Handle } else { // Proceed } 

Я знаю, что я, вероятно, делаю это неправильно, но каков правильный способ справиться с такими исключениями? Я не хочу видеть сообщения об ошибках на моей странице.

В руководстве для DOMDocument :: load () указано:

Если пустая строка передается по имени файла или пустой файл, будет генерироваться предупреждение. Это предупреждение не генерируется libxml и не может быть обработано с помощью функций обработки ошибок libxml.

Но нет информации о том, как с этим справиться.

Благодарю.

Related of "Обработка ошибок PHP DOMDocument"

Из того, что я могу собрать из документации , обработка предупреждений, выданных этим методом, сложна, потому что они не генерируются расширением libxml и, следовательно, не могут обрабатываться libxml_get_last_error() . Вы можете использовать оператор подавления ошибок и проверить возвращаемое значение для false

 if (@$xdoc->load($url) === false) // ...handle it 

… или зарегистрировать обработчик ошибок, который генерирует исключение при ошибке :

 function exception_error_handler($errno, $errstr, $errfile, $errline ) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } 

а затем поймать его.

 set_error_handler(function($number, $error){ if (preg_match('/^DOMDocument::loadXML\(\): (.+)$/', $error, $m) === 1) { throw new Exception($m[1]); } }); $xml = new DOMDocument(); $xml->loadXML($xmlData); restore_error_handler(); 

Это работает для меня в PHP 5.3. Но если вы не используете loadXML , вам может потребоваться внести некоторые изменения.

Чтобы отключить ошибки бросания:

 $internal_errors = libxml_use_internal_errors(true); $dom = new DOMDocument(); // etc... libxml_use_internal_errors($internal_errors); 

От php.net

Если пустая строка передается по имени файла или пустой файл, будет генерироваться предупреждение. Это предупреждение не генерируется libxml и не может быть обработано с помощью функций обработки ошибок libxml.

В вашей рабочей среде вы не должны показывать ошибки пользователю. Им не нужно их видеть, поэтому учитывая это, вы можете использовать …

 $xdoc = new DOMDocument(); if ( $xdoc->load($url) ) { // valid } else { // invalid } 

Для меня следующий трюк

 $feed = new DOMDocument(); $res= @$feed->load('http://www.astrology.com/horoscopes/daily-extended.rss'); if($res==1){ //do sth }