为了账号安全,请及时绑定邮箱和手机立即绑定

我能试着/抓住警告吗?

我能试着/抓住警告吗?

PHP
叮当猫咪 2019-06-17 16:59:50
我能试着/抓住警告吗?我需要捕捉从某些php本机函数抛出的一些警告,然后处理它们。具体而言:array dns_get_record  ( string $hostname  [, int $type= DNS_ANY  [, array &$authns  [, array &$addtl  ]]] )当DNS查询失败时,它将引发警告。try/catch不起作用,因为警告也不例外。我现在有两个选择:set_error_handler似乎有点过分,因为我必须使用它来过滤页面中的每一个警告(这是真的吗?)调整错误报告/显示,使这些警告不会被回显到屏幕上,然后检查返回值;如果它是false,没有找到主机名的记录。这里的最佳做法是什么?
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

设置和恢复错误处理程序

一种可能是在调用之前设置自己的错误处理程序,然后用restore_error_handler().

set_error_handler(function() { /* ignore errors */ });dns_get_record();restore_error_handler();

您可以在此基础上构建并编写一个可重用的错误处理程序,为您记录错误。

set_error_handler([$logger, 'onSilencedError']);dns_get_record();restore_error_handler();

将错误转化为例外

你可以用set_error_handler()ErrorException类将所有php错误转换为异常。

set_error_handler(function($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);});try {
    dns_get_record();} catch (ErrorException $e) {
    // ...}

使用自己的错误处理程序时要注意的重要事项是,它将绕过error_reporting设置和传递所有错误(通知、警告等)给您的错误处理程序。您可以将第二个参数设置为set_error_handler()若要定义要接收的错误类型,或使用... = error_reporting()在错误处理程序中。

抑制警告

另一种可能是使用@运算符抑制调用,并检查dns_get_record()之后。但我建议你不要这样由于要处理的是错误/警告,而不是被抑制的错误/警告。


查看完整回答
反对 回复 2019-06-17
?
千万里不及你

TA贡献1784条经验 获得超9个赞

真正有效的解决方案是将简单的错误处理程序设置为E_WARNING参数,如下所示:

set_error_handler("warning_handler", E_WARNING);dns_get_record(...)restore_error_handler();function warning_handler($errno, $errstr) {
 // do something}


查看完整回答
反对 回复 2019-06-17
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

小心@操作者-它在消除警告的同时,也消除了致命的错误。我花了很多时间调试一个系统中的一个问题,在这个系统中,有人写了@mysql_query( '...' )问题是MySQL支持没有加载到PHP中,因此造成了一个无声的致命错误。对于那些作为PHP核心的一部分的东西来说是安全的,但是小心使用。

bob@mypc:~$ php -aInteractive shell

php > echo @something(); // this will just silently die...

没有进一步的输出-祝您好运调试这个!

bob@mypc:~$ php -aInteractive shell

php > echo something(); // lets try it again but don't suppress the errorPHP Fatal error:  
Call to undefined function something() in php shell code on line 1PHP Stack trace:PHP   1. {main}() php shell code:0bob@mypc:~$

这一次,我们可以看到它为什么失败了。


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 263 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信