【问题标题】:dns_get_record(): A temporary server error occurred.dns_get_record():发生临时服务器错误。
【发布时间】:2016-07-16 19:28:09
【问题描述】:

我正在查询一大堆地址,有些在线,有些不在线。但是,我似乎无法解决此错误,即使捕获异常也会失败:(

 dns_get_record(): A temporary server error occurred. 


        try {
            $result = dns_get_record('_minecraft._tcp.' . $addr, DNS_SRV);
        }
        catch (Exception $e) {
            return [$addr,$port];
        }

如果发生此错误,我想继续执行脚本,跳过记录,但目前脚本只是暂停。

任何帮助表示赞赏!

【问题讨论】:

  • 定义catching the exception fails,它甚至会抛出异常吗?除非它抛出异常或致命错误,否则脚本不应停止。
  • 我收到一个 500 错误,返回:dns_get_record(): 发生临时服务器错误。
  • 检查网络服务器日志文件
  • 对不起,我得到 200 OK 并出现 ErrorException (E_UNKNOWN) dns_get_record(): 发生临时服务器错误。
  • 那么你捕捉到了错误的异常。你需要抓住ErrorException

标签: php laravel exception dns


【解决方案1】:

我也无法捕捉到这个异常。以及我如何理解这是 php 的错误: https://bugs.php.net/bug.php?id=73149

但我找到了另一个解决方案。调用此函数时可以使用@。当你调用这个符号时,这个符号会杀死所有错误。它看起来像这样:

$dns = @dns_get_record($domain, DNS_A);
if(!$dns){
    return false;
}

【讨论】:

  • 看起来这是解决这个 PHP 错误的方法。虽然我们最终为这个问题使用了外部 DNS API(是的,我知道......),但我会将其标记为任何找到此问题的人的答案。谢谢!!
【解决方案2】:

试试这个:

     try {
         $dns = dns_get_record($domain, DNS_A);
     }
     catch (Exception $e) {
         if ($e->getMessage() !== 'dns_get_record(): A temporary server error     occurred.') {
             throw $e;
         }
         $dns = false;
     }

【讨论】:

    猜你喜欢
    • 2020-10-27
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 2017-07-02
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多