PHP fsockopen ничего не возвращает - PullRequest
0 голосов
/ 20 мая 2010

Я изменяю оболочку PHP db для базы данных redis.

Вот как выглядит моя функция:

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
 }

Как мне заставить мою функцию соединения отправлять FALSE, когда fsockopen не работает?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 20 мая 2010

С небольшого пути вниз по странице fsockopen() (приходится прокручивать почти до конца):

Иногда сокеты UDP открываются без ошибок, даже если удаленный хост недоступен. Ошибка станет очевидной только при чтении или записи данных в / из сокета. Причина этого заключается в том, что UDP является протоколом «без установления соединения», что означает, что операционная система не пытается установить соединение для сокета до тех пор, пока ей действительно не понадобится отправлять или получать данные.

Я собираюсь догадаться, что это ваша проблема, я думаю, вам нужно сделать тестовое чтение / запись, чтобы увидеть, действительно ли это было успешно или нет.

1 голос
/ 20 мая 2010

Попробуйте следующий код и посмотрите, работает ли он как задумано:

public function connect()
{
    $sock = @fsockopen('localhost', '6379',  $errno, $errstr, 2);

    if (!is_resource($sock))
        return FALSE;

    stream_set_timeout($sock, 2); 
    return $sock;
}
0 голосов
/ 16 октября 2010

Я знаю, что может быть слишком поздно, чтобы ответить. Но у fsockopen вроде есть проблема с 'localhost' .. попробуйте использовать '127.0.0.1', и я уверен, что он подключится. ;)

0 голосов
/ 20 мая 2010
@fsockopen

Перед вами функция @, которая будет подавлять ошибки. Если ошибка вызывает нулевой возврат, вы ничего не получите. Удалите @ и зарегистрируйте или отобразите все возникающие ошибки или предупреждения.

...