За последние 24 часа нас посетили 16104 программиста и 1546 роботов. Сейчас ищут 879 программистов ...

Как проверить доступность другого сайта?

Тема в разделе "Прочие вопросы по PHP", создана пользователем nikemat, 2 сен 2014.

  1. nikemat

    nikemat Guest

    мне нужно проверить, доступен ли удалённый сайт, в течение максимум двух секунд.
    в частности, наблюдаю часто что висит сайт free.rcast.pro а с ним и висит мой сервер, когда использую рекомендованную функцию проверки доступности:
    Код (Text):
    1. function check_domain_availible($domain)
    2.   {
    3.  
    4.   $curlInit = curl_init($domain);
    5.   curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 5);
    6.   curl_setopt($curlInit, CURLOPT_HEADER, true);
    7.   curl_setopt($curlInit, CURLOPT_NOBODY, true);
    8.   curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);
    9.  
    10.   $response = @curl_exec($curlInit);
    11.   curl_close($curlInit);
    12.  
    13.   if ($response)
    14.     return true;
    15.   return false;
    16.   }
    17.  
    18. if(check_domain_availible("http://free.rcast.pro/")){echo "доступен";}
    19. else{echo "недоступен";}
    какие есть еще способы, менее ресурсоемкие, более быстрые и с защитой от зависания сервера?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Не вижу ресурсоемкость. А вот если вызывать этот код много и часто, вы сами себе сделаете DDOS. Сдается мне, потому у вас все и висит, вы не ресурсы, а буфер забиваете.
     
  3. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    return strpos(`ping free.rcast.pro`, 'Ответ')>0;
    Только проверьте, что на вашем хостинге это работает :) Это страшное колдунство
     
  4. nikemat

    nikemat Guest

    пока речь идёт о разовой проверки доступности, но если тот сайт висит, то и мой не открывается(
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Допустим, ваши сайты физически на одной машине. Зачем проверять ИХ сайт в таком случае? Все равно что "если у соседа нет воды, то и у меня нет, пойду схожу к соседу, спрошу, есть ли у него вода, а то мне в душ надо".
     
  6. nikemat

    nikemat Guest

    ну, допустим, в бытовом плане я часто поступаю так, ну а по делу- сайты на разных машинах) и когда функция пытается проверить его доступность- мой сайт виснет)
     
  7. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    fsockopen по 80-му порту с маленьким таймаутом, на крайняк можно и get_headers()
     
  8. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ааа. Ну тогда сайт не виснет. Ты просто не совсем понимаешь, что происходит. Ты посылаешь пакет с таймаутом 5 секунд. Если тот сайт лежит, твой скрипт будет ждать 5 секунд, пока не выйдет таймаут. Если ты посылаешь несколько пакетов, нужно по 5 секунд на каждый. Если ты не дождался и снова тыкаешь, жди заново.

    Тут не в ресурсоемкости дело, а в том, что ты таймауты ловишь и ждешь. Сервер при этом не нагружается ни капли, просто таймер тикает.