我正在为redis数据库修改PHP db包装器。
下面是我的函数的外观:
public function connect() {
$sock = @fsockopen('localhost', '6379', $errno, $errstr, 2);
if ($sock === FALSE) {
return FALSE;
}
else {
stream_set_timeout($sock, 2);
return $sock;
}
}
我想做的是从包装器中的另一个部分调用这个函数:
if ($this->connect() !== FALSE) {
// Do stuff
}
当fsockopen不工作时,如何让我的connect函数发送FALSE?
谢谢!
发布于 2010-05-20 18:20:17
从fsockopen()
页面往下一点(几乎要滚动到底部):
即使远程主机无法访问,
UDP套接字有时也会显示为已打开而没有错误。只有在从套接字读取数据或向套接字写入数据时,该错误才会变得明显。这样做的原因是因为UDP是一种“无连接”协议,这意味着操作系统在实际需要发送或接收数据之前不会尝试为套接字建立链接。
我猜这就是你的问题,我猜你必须做一个读/写测试,看看它是否真的成功了。
发布于 2010-05-20 18:27:37
尝试以下代码,看看是否按预期工作:
public function connect()
{
$sock = @fsockopen('localhost', '6379', $errno, $errstr, 2);
if (!is_resource($sock))
return FALSE;
stream_set_timeout($sock, 2);
return $sock;
}
发布于 2010-05-20 18:00:59
@fsockopen
你的函数前面有一个@,用来抑制错误。如果错误导致零返回,你将不会得到任何东西。删除@并记录或显示任何产生的错误或警告。
https://stackoverflow.com/questions/2876478
复制相似问题