0

我正在为 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 不工作时,如何让我的连接函数发送 FALSE?

谢谢!

4

4 回答 4

3

从页面下方的一点点fsockopen()开始(必须几乎滚动到底部):

即使远程主机无法访问,UDP 套接字有时也似乎已打开且没有错误。只有当您从套接字读取或写入数据时,该错误才会变得明显。这样做的原因是因为 UDP 是一个“无连接”协议,这意味着操作系统不会尝试为套接字建立链接,直到它真正需要发送或接收数据。

我猜那是你的问题,我猜你必须做一个读/写测试,看看它是否真的成功。

于 2010-05-20T18:20:17.153 回答
1

试试下面的代码,看看它是否按预期工作:

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-20T18:27:37.340 回答
0
@fsockopen

你的函数前面有一个@,它将抑制错误。如果错误导致零回报,您将一无所获。删除 @ 并记录或显示任何产生的错误或警告。

于 2010-05-20T18:00:59.010 回答
0

我知道现在回答可能为时已晚。但是,fsockopen 'localhost' 有点问题.. 尝试使用 '127.0.0.1' nim 确保它会连接。;)

于 2010-10-16T17:40:51.660 回答