Проверка доступности сайта на PHP/JavaScript

Проверка доступности сайта на PHP/JavaScript

11757
Проверка доступности сайта на PHP/JavaScript

Проверка доступности сайта с помощью fopen()

Приведенный PHP скрипт пытается получить страницу по указанному url. Если ответ от сервера не поступит в течении 12 секунд (default_socket_timeout), то URL будет считаться НЕ доступным.

1
2
3
4
5
6
7
8
9
ini_set('default_socket_timeout', '12');
$fp = fopen($url, "r");
$res = fread($fp, 500);
fclose($fp);
if (strlen($res) > 0)
  echo 'Ресурс '.$url.' доступен';
else
  echo 'Ресурс '.$url.' НЕ доступен';

Проверка ответа сервера при помощи библиотеки cURL (Libcurl)

Подключаемая библиотека cURL (в PHP она называется Libcurl) для работы с сетевыми протоколами HTTP. С ее помощью можно узнать ответ сервера и определить доступность запрашиваемого сайта. cURL работает практически на всех хостинг-площадках.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function check_domain($domain)
{
  if (!filter_var($domain, FILTER_VALIDATE_URL)) return false;
 
  $curlInit = curl_init($domain);
  curl_setopt($curlInit, CURLOPT_CONNECTTIMEOUT, 12);
  curl_setopt($curlInit, CURLOPT_HEADER, true);
  curl_setopt($curlInit, CURLOPT_NOBODY, true);
  curl_setopt($curlInit, CURLOPT_RETURNTRANSFER, true);
 
  $response = curl_exec($curlInit);
  curl_close($curlInit);
 
  if ($response) return true;
  return false;
}
 
//Вызов функции
if (check_domain($url))
  echo 'Ресурс '.$url.' доступен';
else
  echo 'Ресурс '.$url.' НЕ доступен';

Проверка HTTP статуса ответа от сервера

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function check_http_status($url)
  {
  $user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36';
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_VERBOSE, false);
  curl_setopt($ch, CURLOPT_TIMEOUT, 12);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($ch, CURLOPT_SSLVERSION, 3);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  $page = curl_exec($ch);
 
  $err = curl_error($ch);
  if (!empty($err))
    return $err;
  
  $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  curl_close($ch);
  return $httpcode;
  }
 
$answer = check_http_status($url);
echo 'Код статуса HTTP: '.$answer.'. Ответ на запрос URL: '.$url;

Примеры строк User Agent


Desktop браузеры:

  • Mozilla Firefox 36 (Win 8.1 x64): Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0
  • Google Chrome 53 (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
  • Google Chrome 40 (Win 8.1 x64): Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
  • Opera 40 (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36 OPR/40.0.2308.62
  • Opera 12.17 (Win 8 x64): Opera/9.80 (Windows NT 6.2; WOW64) Presto/2.12.388 Version/12.17
  • Apple Safari 5.1 (Win 8 x64): Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
  • Internet Explorer 11 (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
  • Internet Explorer 11 (Win 8.1 x64): Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; ASU2JS; rv:11.0) like Gecko
  • Microsoft Edge (Win 10 x64): Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586

Мобильные браузеры:

  • iPhone: Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25
  • Android 2.3.5 (Philips W632): Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; Philips W632 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Планшеты:

  • iPad: Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25

Поисковые системы:

  • Яндекс: Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)
  • Google: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
  • Bing: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
  • Yahoo! Slurp: Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)
  • Mail.ru: Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/Fast/2.0; +http://go.mail.ru/help/robots)
  • Sputnik: Mozilla/5.0 (compatible; SputnikBot/2.3; +http://corp.sputnik.ru/webmaster)

Роботы, боты, анализаторы:

  • Ahrefs: Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)
  • Majestic: Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)
  • SMTBot: Mozilla/5.0 (compatible; SMTBot/1.0; +http://www.similartech.com/smtbot)
  • linkdex: Mozilla/5.0 (compatible; linkdexbot/2.2; +http://www.linkdex.com/bots/)
  • Exabot: Mozilla/5.0 (compatible; Exabot/3.0; +http://www.exabot.com/go/robot)
  • StatOnline.ru: Mozilla/5.0 (compatible; StatOnlineRuBot/1.0)

Проверка доступности Интернета на JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
setInterval(function() {       
    var request_inCheck = new XMLHttpRequest();
    request_inCheck.open("GET", window.location.pathname, true);
    request_inCheck.timeout = 2000;
 
    request_inCheck.addEventListener("readystatechange", function() {
         
        if(request_inCheck.status == 0) {
            //Есть Интернет соединение
        } else {
            //Нет Интернет соединения
        }
         
    });
    request_inCheck.send();
}, 10000); // Проверка каждые 10 секунд

Пингуем сайт с умным использованием нативного Image объекта

Это работает на всех типах серверов: веб-серверы, FTP-серверы и игровые серверы

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function Pinger(ip, callback) {
 
  if(!this.inUse) {
 
    this.inUse = true;
    this.callback = callback
    this.ip = ip;
 
    var _that = this;
 
    this.img = new Image();
 
    this.img.onload = function() {_that.good();};
    this.img.onerror = function() {_that.good();};
 
    this.start = new Date().getTime();
    this.img.src = "http://" + ip;
    this.timer = setTimeout(function() { _that.bad();}, 1500);
 
  }
}

Помогла ли вам статья?
353 раз уже помогла
Комментарии: (0)

КАТЕГОРИИ