Php проверить доступность сервера

Ping site and return result in PHP

This was grabbed from this post on how to check if a URL exists. Because Twitter should provide an error message above 300 when it is in maintenance, or a 404, this should work perfectly.

function ping($host, $port, $timeout) < $tB = microtime(true); $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); if (!$fP) < return "down"; >$tA = microtime(true); return round((($tA - $tB) * 1000), 0)." ms"; > //Echoing it will display the ping if the host is up, if not it'll say "down". echo ping("www.google.com", 80, 10); 

that’s no good return values. why not return 0/false/null on failure and an integer representing the milliseconds on success?

Ping is working on ICMP protocol, there are no such thing like ‘port’. You can ping a host with 0 open tcp ports.

fsockopen is not working on local host when internet is not connected.. it shows this error Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: No such host is known

@karim79 Thanks a lot. Had to use it in emergency directly in production mode on a project in very short notice. Used it as it is. Saved my life.

Another option (if you need/want to ping instead of send an HTTP request) is the Ping class for PHP. I wrote it for just this purpose, and it lets you use one of three supported methods to ping a server (some servers/environments only support one of the three methods).

require_once('Ping/Ping.php'); $host = 'www.example.com'; $ping = new Ping($host); $latency = $ping->ping(); if ($latency) < print 'Latency is ' . $latency . ' ms'; >else

ping is available on almost every OS. So you could make a system call and fetch the result.

Use get_headers and compare the http code.

function ping(string $url): bool < $headers = get_headers($url); $httpCode = intval(substr($headers[0], 9, 3)); return $httpCode >= 200 && $httpCode

With the following function you are just sending the pure ICMP packets using socket_create. I got the following code from a user note there. N.B. You must run the following as root.

Although you can’t put this in a standard web page you can run it as a cron job and populate a database with the results.

So it’s best suited if you need to monitor a site.

function twitterIsUp() < return ping('twitter.com'); >function ping ($host, $timeout = 1) < /* ICMP ping packet with a pre-calculated checksum */ $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost"; $socket = socket_create(AF_INET, SOCK_RAW, 1); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' =>$timeout, 'usec' => 0)); socket_connect($socket, $host, null); $ts = microtime(true); socket_send($socket, $package, strLen($package), 0); if (socket_read($socket, 255)) < $result = microtime(true) - $ts; >else < $result = false; >socket_close($socket); return $result; > 

Источник

Читайте также:  Увеличить резкость изображения python

Php проверить доступность сервера

БлогNot. Проверка доступности сервера на PHP

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

Проверить доступность одного Web-сервера легко с помощью стандартной функции fsockopen :

0) $status = 'alive, responding'; fclose ($fp); > echo "$server status is $status"; ?>

Однако для проверки состояния нескольких серверов такой подход едва ли годится — вызов функции fsockopen может длиться столько секунд, сколько указано в её последнем параметре, и только затем будет выполнена следующая команда сценария. Используя PHP 5 и потоковые сокеты задачу можно выполнить и асинхронно, правда, код станет сложнее:

 $host) < $s = @stream_socket_client ("$host:80", $errno, $errstr, $timeout, STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); if ($s) < $sockets[$id] = $s; $status[$id] = "in progress"; >else < $status[$id] = "failed, $errno $errstr"; >> //Ждём ответов while (count($sockets)) < $read = $write = $sockets; $n = stream_select ($read, $write, $e = null, $timeout); if ($n >0) < foreach ($read as $r) < $id = array_search($r, $sockets); $data = fread($r, 8192); if (strlen($data) == 0) < if ($status[$id] == "in progress") < $status[$id] = "failed to connect"; >fclose($r); unset ($sockets[$id]); > else < $status[$id] .= $data; >> foreach ($write as $w) < $id = array_search($w, $sockets); @fwrite ($w, "HEAD / HTTP/1.0\r\nHost: " . $hosts[$id] . "\r\n\r\n"); $status[$id] = "waiting for response"; >> else < foreach ($sockets as $id =>$s) < $status[$id] = "timed out " . $status[$id]; >break; > > //Вывод результатов foreach ($hosts as $id => $host) < echo "Host: $host Status: " . $status[$id] . "
\n"; > ?>

На локалхосте Windows, несмотря на подавление вывода сообщений об ошибках от функции stream_select , Вы рискуете получить лишь

Warning: Invalid CRT parameters detected in C:\Inetpub\wwwroot\socks.php on line 22

Причина думаю, в таком же баге, на *nix-сервере пример сработал.

11.05.2012, 16:55 [13908 просмотров]

Источник

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

Аптайм сайта (от англ. uptime) — время его непрерывной работы – крайне важная характеристика доступности сайта. Для того чтобы убедиться в доступности или недоступности сайта, необходимо выполнить проверку. Проверку доступности сайта можно провести с помощью PHP скрипта, о чем мы и поговорим далее.

Самый простой инструмент для проверки сайта на доступность – это модуль PHP cURL. С помощью него мы будем выполнять проверку статуса доступности того или иного сайта.

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

Следующий кусочек кода используется для проверки доступности домена с помощью cURL. Для большей полезности, весь код, приведенный снизу, обернут в функцию, которая называется isSiteAvailable().

Функция isSiteAvailable() выполняет cURL запрос и проверяет доступность домена, а также находится ли он онлайн. Если сайт доступен — возвращается TRUE, иначе возвращается FALSE, т.е. сайт находится офлайн.

// Проверка правильности URL
if(!filter_var($url, FILTER_VALIDATE_URL)) return false;
>

// Инициализация cURL
$curlInit = curl_init($url);

// Установка параметров запроса
curl_setopt($curlInit,CURLOPT_CONNECTTIMEOUT,10);
curl_setopt($curlInit,CURLOPT_HEADER,true);
curl_setopt($curlInit,CURLOPT_NOBODY,true);
curl_setopt($curlInit,CURLOPT_RETURNTRANSFER,true);

Читайте также:  Html верстальщик junior удаленно

// Получение ответа
$response = curl_exec($curlInit);

// закрываем CURL
curl_close($curlInit);

return $response ? true : false;
>

Как использовать?

Вызывайте функцию isSiteAvailable() со строковым аргументом, представляющим собой URL адрес сайта, доступность которого вы хотите проверить. И в зависимости от ответа вы можете предпринимать дальнейшие действия.

if(isSiteAvailible($URL)) echo ‘Сайт доступен.’;
>else echo ‘Сайт недоступен.’;
>

Вот так просто можно проверить, доступен ли сайт или нет с помощью PHP и cURL.

Создано 25.10.2018 10:57:17

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 1 ):

    хм, а как раз таки хттпс не доступен — хотя тотже хттп — норм.

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2023 Русаков Михаил Юрьевич. Все права защищены.

    Источник

    Проверка доступности сервера средствами php

    Настроим средствами php опрос сервера и ответ о его недоступности получим на почту.

    1 способ отправляет сообщение на почту в текстовом формате. Здесь не задается адрес отправителя, поэтому в поле адрес будет почта провайдера.

    $host = ‘46.191.238.17’;
    $port = 80;
    $waitTimeoutInSeconds = 1;
    if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)) // It worked
    echo «It worked»;
    // текст сообщения
    $message = «первая строка\nвторая строка\nтретья строка»;
    // При помощи функции wordwrap() расставляем
    // переносы так, чтобы строки были не длиннее 70 символов
    $message = wordwrap($message, 70);
    // отправляем сообщение
    mail(‘admin@server.com’;, ‘Тема’, $message);
    > else // It didn’t work
    echo «It didn’t work «;
    >
    fclose($fp);
    ?>

    2 способ отправляет сообщение с html оформлением и с адресом отправителя

    $namehost = ‘SRVR-RDS’;
    $iphost = ‘46.191.238.17’;
    $port = 80;
    $waitTimeoutInSeconds = 1;
    if($fp = fsockopen($iphost,$port,$errCode,$errStr,$waitTimeoutInSeconds)) // It worked
    echo «It worked»;
    >

    else // It didn’t work
    echo «It didn’t work «;
    //тема сообщения
    $subject = «Сервер $namehost недоступен «;
    // текст сообщения
    $message ;
    // Указываем правильный MIME-тип сообщения:
    $headers = ‘MIME-Version: 1.0’ . «\r\n»;
    $headers .= ‘Content-type: text/html;
    charset=windows-1251′ . «\r\n»;

    // список получателей
    $to = ‘ admin@server.com’;;
    // Добавляем необходимые заголовки
    $headers .= ‘From: Robot ‘ . «\r\n»;

    // отправляем сообщение
    mail($to, $subject, $message, $headers);

    >
    fclose($fp);
    ?>

    Источник

    Читайте также:  Php сохранить файл utf 8

    Скрипт PHP: проверка доступности сайта fopen и cURL

    Скрипт, приведенный ниже, пытается прочитать страницу (картинку, css-файл и др.), по заданному url. Если ответ от сервера с содержимым не поступит в течении 10 секунд, сайт или то, что запрошено, будет считаться не доступным.

    $url = ‘http://obovsem.org.ua/’ ;
    ini_set ( ‘default_socket_timeout’ , ’10’ ) ;
    $fp = fopen ( $url , «r» ) ;
    $res = fread ( $fp , 500 ) ;
    fclose ( $fp ) ;
    if ( strlen ( $res ) > 0 )
    echo ‘Сайт ‘ . $url . ‘ доступен’ ;
    else
    echo ‘Сайт ‘ . $url . ‘ не доступен’ ;

    По умолчанию в PHP ожидание ответа посланного с помощью сокетов (fopen) длится 60 сек.

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

    cURL — подключаемая библиотека (в PHP она называется Libcurl) для работы по различным протаколам, в том числе и HTTP. С ее помощью можно узнать ответ сервера, что позволяет определить, доступен ли запрашиваемый сайт в данный момент. Эта библиотека доступна практически на всех хостинг-площадках. Документацию по функциям и возможностям библиотеки cURL в PHP можно посмотреть тут: www.php.net/manual/ru/book.curl.php , php.net/curl .

    function check_domain_availible ( $domain )
    {
    if ( ! filter_var ( $domain , FILTER_VALIDATE_URL ) )
    return false ;

    $curlInit = curl_init ( $domain ) ;
    curl_setopt ( $curlInit , CURLOPT_CONNECTTIMEOUT , 10 ) ;
    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 ;
    }

    $url = ‘http://obovsem.org.ua/’ ;
    if ( check_domain_availible ( $url ) )
    echo ‘Сайт ‘ . $url . ‘ доступен’ ;
    else
    echo ‘Сайт ‘ . $url . ‘ не доступен’ ;

    Функция check_domain_availible ( ) пытается получить ответ от сервера, и если он есть, сайт считается доступным. Обратите внимание, что ответ от сервера может быть с каким угодно статусом HTTP: HTTP 301 (редирект на другую страницу), HTTP 404 (страница не найдена) и т.д. Детальную инфформацию о статусах HTTP можно посмотреть тут: » Status code definitions (w3.org eng) «, » Ответы Google для Web-мастеров » и » коды статуса http (поиск в Google) «.

    Функция filter_var ( ) появилась в PHP 5 и служит заменой некоторых регулярных выражений, часто используемых в скриптах: проверка на соответствие введенных данных URL, E-mail и др. Документация по этой функции тут: описание функции filter_var() , фильтры функции filter_var() .

    Чтобы узнать только HTTP статус ответа сервера, и уже на его основании делать выводы о доступности или не доступности сайта, можно использовать скрипт, приведенный ниже:

    function check_http_status ( $url )
    {
    $user_agent = ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)’ ;
    $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 , 10 ) ;
    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 ;
    }

    Источник

    Оцените статью