【问题标题】:Trouble getting PHP fsockopen to ignore errors无法让 PHP fsockopen 忽略错误
【发布时间】:2012-08-03 17:02:10
【问题描述】:

我正在使用 etsy 的开源 statsd library 设置我的 PHP 脚本报告。 我的连接基于他们给定的示例,但我遇到了一个问题,fsockopen 似乎忽略了try/catch 并正在打印它的错误。

当 statsd 服务器启动并运行时,一切正常 - 但如果它关闭或 php 脚本无法连接到它:

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: 
Name or service not known

我什至尝试在 fsockopen 前面添加@,但没有骰子。它似乎也完全忽略了超时设置,因为返回错误大约需要 20 秒:

        try {
            $host = 'stats.thisserverisdown.com';
            $port = '8125';
            if ( $fp = @fsockopen("udp://$host", $port, $errno, $errstr, 1) ) {
                if (!(get_resource_type($fp) == 'stream')) { return false; }
                stream_set_timeout($fp,1);
                stream_set_blocking($fp,false);
                foreach ($sampledData as $stat => $value) {
                    @fwrite($fp, "$stat:$value");
                }
                @fclose($fp);
            }
            return true;
        } catch (Exception $e) {
            return false;
        }

【问题讨论】:

    标签: php fsockopen


    【解决方案1】:

    fsockopen 没有抛出错误。因为fsockopen 必须解析您提供的主机名,所以它调用getaddinfo(),这是失败的。

    尝试提供 IP 地址,或者:

    fsockopen( @"udp://$host", ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2020-04-12
      • 2012-07-17
      • 1970-01-01
      • 2019-11-19
      • 2014-07-24
      • 2015-03-30
      相关资源
      最近更新 更多