【发布时间】: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;
}
【问题讨论】: