php如何捕获一个警告信息

Philippe Gerber

我们要需怎样捕获警告,从PHP的一些原生函数被抛出,然后处理它们。

例如:
array dns_get_record  ( string $hostname  [, int $type= DNS_ANY  [, array &$authns  [, array &$addtl  ]]] )
当dns查询失败会抛出一个警告。

用try/catch是不可以的,因为警告不算是一个异常。


现在有两个选择:
1.set_error_handler似乎有点小题大做,因为我不得不使用它来过滤页面中的每一个警告(这是真的吗?);
2.调整错误报告/显示警告这些不回输出到屏幕上,没有发现主机记录只能检测到返回值是false.

最佳的做法是什么?

一种可能性是在调用之前设置自己的错误处理程序,用restore_error_handler()恢复上一个错误处理。Zend Framework可以在这几方面做到。顺便说一句最近在php新闻组上有一些讨论是关于用原来的例外来取代PHP错误。


另一种可能性是在检查dns_get_record()的返回值之后使用@运算符来抑制错误。但是建议不要把这个作为errors/warnings的触发处理,不要抑制。

注:
你能用 set_error_handler()方法和ErrrorException类来把所有的php错误转化为异常。

function handleError($errno, $errstr, $errfile, $errline, array $errcontext)
{
    // error was suppressed with the @-operator
    if (0 === error_reporting()) {
        return false;
    }

    throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler('handleError');

try {
    dns_get_record();
}
catch (ErrorException $e) {
    // ...
}

京ICP备14008139号-1