За последние 24 часа нас посетили 34777 программистов и 1755 роботов. Сейчас ищут 894 программиста ...

Функция проверки - существует ли сайт в онлайне

Тема в разделе "PHP для новичков", создана пользователем rs_ssh, 4 июн 2017.

  1. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Функция работает отлично на локальной машине, НО на сервере не срабатывает, если проверяем кириллический домен(например - http://майл.рф).
    PHP:
    1. function getheaders($url)
    2. {
    3.     $c = curl_init();
    4.     curl_setopt($c, CURLOPT_HEADER, false);
    5.     curl_setopt($c, CURLOPT_NOBODY, true);
    6.     curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    7.     curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
    8.     curl_setopt($c, CURLOPT_URL, $url);
    9.     $headers = curl_exec($c);
    10.     curl_close($c);
    11.     return $headers;
    12. }
     
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    кирилистические домены надо преобразовывать, вот пример с stackoverflow как это делается
    PHP:
    1. use TrueBV\Punycode;
    2.  
    3. $url        = 'http://домены.рф/партнерская-программа';
    4. $urlDetails = parse_url($url);
    5.  
    6. $punycode = new Punycode();
    7. $domain   = $punycode->encode($urlDetails['host']);
    8.  
    9. $content  = file_get_contents($urlDetails['scheme']. '://' . $domain . $urlDetails['path']);
     
  3. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    PHP:
    1. $host = parse_url('http://майл.рф')['host'];
    2. echo idn_to_ascii($host);
    Код (Text):
    1. xn--80asgb.xn--p1ai
    --- Добавлено ---
    file_get_contents здесь не подойдет,так как он Warning будет бросать если сайт не существует.
     
  4. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А тупо вот в лоб сделать exec для ping уже не вариант? Обязательно города городить?
     
  5. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Спасибо!

    Переделал функцию, можно ли ее упростить?

    PHP:
    1. function getheaders($url)
    2. {
    3.     $c = curl_init();
    4.     curl_setopt($c, CURLOPT_HEADER, false);
    5.     curl_setopt($c, CURLOPT_NOBODY, true);
    6.     curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    7.     curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
    8.     $host = parse_url($url)['host'];
    9.     $url = idn_to_ascii($host);
    10.     curl_setopt($c, CURLOPT_URL, $url);
    11.     $headers = curl_exec($c);
    12.     curl_close($c);
    13.     return $headers;
    14. }
     
  6. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
     
  7. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    @Fell-x27 кстати да...

    PHP:
    1. exec('ping ya.ru', $out);
     
  8. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ну хоть кто-то меня услышал :)