Создание службы ping uptime с помощью PHP
У меня есть сервер, на котором я могу использовать PHP, и маршрутизатор, который можно пинговать из Интернета. Я хочу написать PHP-скрипт, который каждые 5 минут отправляет пинг на маршрутизатор со следующими результатами:
- Если пинг пройдет успешно, то ничего не произойдет.
- Если пинг не удается, то он ждет несколько минут, и если он все еще не удается, он отправляет предупреждение на мой адрес электронной почты один раз.
- После того, как маршрутизатор снова станет доступен для пинга, он отправит электронное письмо о том, что он Хорошо.
Можно ли это сделать с помощью PHP? Как? У кого-нибудь есть небольшой PHP-файл, который делает это?
3 answers
Ниже я написал простой PHP-скрипт, который делает то, что вы просите. Он проверяет сервер, записывает результат в текстовый файл ("вверх" или "вниз") и отправляет электронное письмо в зависимости от того, был ли предыдущий результат выше или ниже.
Чтобы заставить его запускаться каждые пять минут, вам нужно настроить задание cron для вызова PHP-скрипта каждые пять минут. (Многие общие веб-хостинги позволяют вам настраивать задания cron; обратитесь к документации вашего хостинг-провайдера, чтобы узнать, как это сделать.)
<?php
//Config information
$email = "[email protected]";
$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";
}
Я лично использую службу Pingdom, если ее можно пинговать из Интернета и на ней работает HTTP-сервер. Нет необходимости действительно углубляться в написание специального сценария.