无法让PHP fsockopen忽略错误

时间:2012-08-03 17:02:10

标签: php fsockopen

我正在使用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;
        }

1 个答案:

答案 0 :(得分:1)

fsockopen没有抛出错误。由于fsockopen必须解析您提供的主机名,因此会调用失败的getaddinfo()

尝试提供IP地址,或:

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