我正在为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?
谢谢!
答案 0 :(得分:3)
从fsockopen()
页面向下一点(必须滚动到底部):
即使无法访问远程主机,UDP套接字有时也会在没有错误的情况下打开。只有当您向套接字读取数据或从套接字写入数据时,该错误才会变得明显。这是因为UDP是一种“无连接”协议,这意味着操作系统在实际需要发送或接收数据之前不会尝试为套接字建立链接。
我猜这是你的问题,我想你必须做一个测试读/写,看它是否真的成功。
答案 1 :(得分:1)
尝试以下代码,看看它是否按预期工作:
public function connect()
{
$sock = @fsockopen('localhost', '6379', $errno, $errstr, 2);
if (!is_resource($sock))
return FALSE;
stream_set_timeout($sock, 2);
return $sock;
}
答案 2 :(得分:0)
@fsockopen
你的函数前面有一个@,它可以抑制错误。如果错误导致零返回,那么你将不会得到任何东西。删除@并记录或显示任何结果错误或警告。
答案 3 :(得分:0)
我知道回答可能为时已晚。 但是,fsockopen有点'localhost'有问题.. 尝试使用'127.0.0.1',我相信它会连接。 ;)