Создание службы поддержки ping с помощью PHP - PullRequest
9 голосов
/ 10 сентября 2011

У меня есть сервер, на котором я могу использовать PHP, и маршрутизатор, который можно пинговать из Интернета. Я хочу написать PHP-скрипт, который отправляет пинг на маршрутизатор каждые 5 минут со следующими результатами:

  • Если пинг пройдет успешно, ничего не произойдет.
  • Если эхо-запрос не выполняется, то он ждет несколько минут, а если он все-таки не проходит, один раз отправляет предупреждение на мой адрес электронной почты.
  • После того, как маршрутизатор снова пингуется, он отправляет электронное письмо, что все в порядке.

Может ли это быть сделано с помощью PHP? Как? У кого-нибудь есть маленький PHP-файл, который делает это?

Ответы [ 3 ]

9 голосов
/ 10 сентября 2011

Ниже я написал простой PHP-скрипт, который делает то, что вы просите. Он пингует сервер, записывает результат в текстовый файл («вверх» или «вниз») и отправляет электронное письмо в зависимости от того, был ли предыдущий результат увеличен или уменьшен.

Чтобы запускать его каждые пять минут, вам нужно настроить задание cron для вызова скрипта PHP каждые пять минут. (Многие общие веб-хосты позволяют вам создавать задания cron; обратитесь к документации вашего хостинг-провайдера, чтобы узнать, как это сделать.)

<?php 

//Config information
$email = "your@emailaddress.com";
$server = "google.com"; //the address to test, without the "http://"
$port = "80";


//Create a text file to store the result of the ping for comparison
$db = "pingdata.txt";

if (file_exists($db)):
    $previous_status = file_get_contents($db, true);
else:
    file_put_contents($db, "up");
    $previous_status = "up";
endif;

//Ping the server and check if it's up
$current_status =  ping($server, $port, 10);

//If it's down, log it and/or email the owner
if ($current_status == "down"):

    echo "Server is down! ";
    file_put_contents($db, "down");

    if ($previous_status == "down"):
        mail($email, "Server is down", "Your server is down.");
        echo "Email sent.";     
    endif;  

else:

    echo "Server is up! ";
    file_put_contents($db, "up");

    if ($previous_status == "down"):
        mail($email, "Server is up", "Your server is back up.");
        echo "Email sent.";
    endif;

endif;


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"; 
}
3 голосов
/ 02 октября 2011

Я лично пользуюсь службой Pingdom, если ее можно пинговать из Интернета, и на ней запущен HTTP-сервер.Не нужно углубляться в написание специального сценария.

0 голосов
/ 02 октября 2011

насколько я знаю, вы не можете создать cronjob с PHP, но вы можете использовать crontab

и это , так что вы сможете пинговать до нужного хоста, также вы можете запустить вместо него

exec("ping 1.2.3.4")

в вашем скрипте

...