首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP DOMDocument错误处理

PHP DOMDocument错误处理
EN

Stack Overflow用户
提问于 2009-11-19 05:03:45
回答 5查看 33.2K关注 0票数 22

在我的应用程序中,我从url加载xml以便对其进行解析。但有时该url可能无效。在这种情况下,我需要处理错误。我有以下代码:

代码语言:javascript
复制
$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的错误处理函数进行处理。

但是没有关于如何处理它的信息。

谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-19 05:17:20

根据我从documentation收集到的信息,处理由此方法发出的警告非常棘手,因为它们不是由libxml扩展生成的,因此不能由libxml_get_last_error()处理。您可以使用错误抑制运算符并检查false的返回值...

代码语言:javascript
复制
if (@$xdoc->load($url) === false)
    // ...handle it

...or寄存器an error handler which throws an exception on error

代码语言:javascript
复制
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}

然后抓住它。

票数 40
EN

Stack Overflow用户

发布于 2011-03-24 17:59:36

代码语言:javascript
复制
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();

这对我在PHP5.3中是有效的。但是如果你没有使用loadXML,你可能需要做一些修改。

票数 8
EN

Stack Overflow用户

发布于 2011-09-19 09:36:19

要禁用引发错误,请执行以下操作:

代码语言:javascript
复制
$internal_errors = libxml_use_internal_errors(true);

$dom = new DOMDocument();
// etc...

libxml_use_internal_errors($internal_errors);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1759069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档