СоХабр закрыт.
С 13.05.2019 изменения постов больше не отслеживаются, и новые посты не сохраняются.
$body=file_get_contents("http://sms.ru/sms/send?api_id=505dfad707-a5df30-aa04jkhkjhk-02f507654e7c&to=380950000000&text=".urlencode(iconv("windows-1251","utf-8","Привет!")));
#!/usr/bin/env php
<?php
//error_reporting(0);
// Устанавливаем временную зону. Пригодится для показа даты и времени в письме.
date_default_timezone_set('Europe/Kiev');
$hostToPing = @fopen(__DIR__."/hosts_to_ping", 'rb');
// Определяем переменную для вывода справки в терминал.
$help = "NULL";
for ($i = 0; $i < $argc; $i++)
{
if ($argv[$i] == "-h") {
$help = "-h";
}
}
/* Проверяем существование файла, если нет, выводим справку, его размер
* (если пустой, выводим справку), если аргументов больше одного, выводим справку,
* если указан аргумент -h, выводим справку.
*/
if ((!$hostToPing) || (filesize(__DIR__."/hosts_to_ping") == "0") || ($argc > 1) || ($help == "-h")) {
echo <<<_END
/////////////////////////////////////////***Справка***//////////////////////////////////////////////////
Скрипт на PHP для пинга и проверки http ответа сервера. Зависимости: PHP, PHP CLI, sendmail, ping.
В папке с программой должен находиться текстовый конфигурационный файл hosts_to_ping. В нем,
первой строкой обязательно укажите email на который будут отсылаться уведомления. Далее
в каждой новой строке (можно оставлять пустые строки) укажите имя сервера и через пробел
(табуляцию) тип проверки. Имя сервера указывается без http://, если это URL или указывайте IP.
Осуществляется два типа проверки ping и проверка ответа на http запрос. Во втором случае, если
ответ - 200, значит все ОК, если нет, то на почту будет отправлено соответствующее уведомление.
Пример файла конфигурации:
your_mail@domain.com
site.com http
site.org ping
8.8.8.8 ping
////////////////////////////////////////////////////////////////////////////////////////////////////////\n
_END;
fclose($hostToPing);
exit();
}
/* Читаем первую строку, там должен быть e-mail, если не проходит проверку на @
* выводим ошибку в терминал.
*/
$tomail = fgets($hostToPing);
$tomail = trim($tomail);
if (strpos("$tomail", "@") === false) {
die("Указан неправильный e-mail!. Смотрите справку указав аргумент -h.\n");
}
$text_error_ping = "Нет ответа на ping.";
$text_error_http = "Ответ сервера:";
// Читаем со второй строки.
while (!feof($hostToPing)) {
$stroka = fgets($hostToPing);
/* Ищем пустые строки. Убираем все пробельные символы и смотрим длину строки,
* если 0, то она пустая, пропускаем итерацию цикла.
*/
$test = preg_replace('/\s/', "", $stroka);
if (strlen($test) == "0") {
continue;
}
// Убираем пробелы вначале и в конце строки.
$stroka = trim($stroka);
// Меняем все табы и где больше одного пробела на один пробел.
$stroka = preg_replace('/\s+/', " ", $stroka);
// Делим строку по пробелу.
$opcii = explode(" ", $stroka);
// Выбираем тип проверки, проверяем, если ошибка отсылаем на мыло и телефон.
if ($opcii[1] == "http") {
$URL = "http://".$opcii[0];
if (!get_headers($URL)){
sendMailError($URL, "Нет ответа на http запрос. Возможно сервер не пингуется!", $tomail);
sendSMS($URL.": Ошибка http! Возможно сервер не пингуется!");
}
else {
$otvet = get_headers($URL);
if (substr($otvet[0], 9, 3) != "200") {
$text_error_http = $text_error_http." ".substr($otvet[0], 9, 3);
sendMailError($URL, $text_error_http, $tomail);
sendSMS($URL." ".$text_error_http);
}
}
}
elseif ($opcii[1] == "ping") {
$command = 'ping -c 10'." ".$opcii[0]." 2> /dev/null 1>&2";
system($command, $return_var);
if ($return_var != "0") {
sendMailError($opcii[0], $text_error_ping, $tomail);
sendSMS($opcii[0].": ".$text_error_ping);
}
}
// Отсылаем ошибку на мыло и телефон, если указан неправильный аргумент
elseif ($opcii[1] != "ping" && $opcii[1] != "http") {
sendMailError($opcii[0], "Указаны неправильные настройки в конфигурационном файле! Смотрите справку указав аргумент -h.", $tomail);
sendSMS($opcii[0].": неправильная настройка в конфиге!");
}
}
fclose($hostToPing);
// Функция отправки сообщения на mail.
function sendMailError($nameServer, $text, $toaddress) {
$date_m = date('l jS \of F Y h:i:s A');
$mailcontent = "
<html>
<head>
<title>Что-то произошло! Отчет о состоянии серверов</title>
</head>
<body>
<div style=\"width: 800px; background-color: olive; color: white; border: 1px dotted graytext; text-align: center; text-transform: uppercase;\">
<h3>Что-то произошло! Отчет о состоянии серверов</h3>
</div>
<div style=\"width: 800px; background-color: saddlebrown; color: white; border: 1px dotted graytext;\">
<h3><b>Сервер:</b> $nameServer</h3>
<h3><b>Сообщение:</b></h3>
<p>$text</p>
<p>$date_m</p>
</div>
</body>
</html>";
$subject = "Что-то произошло! Отчет о состоянии серверов.";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= "From: admin@helper". "\r\n";
mail($toaddress, $subject, $mailcontent, $headers);
}
function sendSMS($textSMS) {
$body=file_get_contents("http://sms.ru/sms/send?api_id=505adfdd707-adf0-aa04-99b9dkfkj7654e7c&to=380950000000&text="
.urlencode("$textSMS"));
}
?>
комментарии (14)