Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка веб-сервера на доступность.
 
 автор: x00   (01.02.2008 в 15:53)   письмо автору
 
 

С помощью этого кода проверяю доступность веб-сервера. Но если серверов много и половина из них не доступна, то на их проверку уходит слишком много времени. Хотелось бы сделать “быструю проверку”, т.к. сервера все в локалке, затратить на проверку каждого не больше 1-2 секунды. Это возможно?


$fp = @fsockopen($ip, $port, $errno, $errstr, 1);
    if ($fp){
        $out = "GET / HTTP/1.1\r\n";
                $out.= "Host: ".$ip."\r\n";
                $out.= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        if(fread($fp, 1)){
            return "green";
        }
        else{
            return "red";
        }
        fclose($fp);
    }
    else{
        return "red";
    }

   
 
 автор: mihdan   (01.02.2008 в 18:03)   письмо автору
 
   для: x00   (01.02.2008 в 15:53)
 

header заголовок

   
 
 автор: x00   (01.02.2008 в 18:18)   письмо автору
 
   для: mihdan   (01.02.2008 в 18:03)
 

Так я и отправляю заголовок. Проблема в том что, fread() упорно пытается получить ответ от недоступного сервера. На что и уходит большее количество времени.

   
 
 автор: mihdan   (01.02.2008 в 18:23)   письмо автору
 
   для: x00   (01.02.2008 в 18:18)
 

Зачем что-то читать? Если соединение успешно - доступен, нет - не доступен.

   
 
 автор: x00   (01.02.2008 в 18:31)   письмо автору
 
   для: mihdan   (01.02.2008 в 18:23)
 

Может не правильно объяснил. Надо не просто пропинговать ip, а узнать работает ли на нём веб-сервер.

   
 
 автор: mihdan   (01.02.2008 в 18:35)   письмо автору
 
   для: x00   (01.02.2008 в 18:31)
 

Какой сервер и как вы это хотели узнать?

   
 
 автор: x00   (01.02.2008 в 18:51)   письмо автору
 
   для: mihdan   (01.02.2008 в 18:35)
 

Например: $fp = fsockopen(“10.10.10.1”, “80”, $errno, $errstr, 1);. Далее, если подключение установлено, fwrite() отправляем заголовки $out и читаем ответ fread(). Если ответ есть, значит сервер(апач в данном случае) доступен. Как я писал ранее, проблема в том, что если сервер не доступен, то fread()ещё секунд 20 пытается получить ответ до таймаута. Если недоступных серверов в списке много, то уходит очень много времени на перебор.

   
 
 автор: x00   (02.02.2008 в 04:17)   письмо автору
 
   для: x00   (01.02.2008 в 15:53)
 

Проблема разрешилась путём добавления stream_set_timeout($fp, 2). Странно, почему не срабатывал последний атрибут у fsockopen (string hostname, int port [, int errno [, string errstr [, float timeout]]]).
Тема закрыта.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования