Давненько уже собирался написать маленький, но ИМХО очень полезный скриптик — контроль работоспособности сайтов.
Вроде существует достаточно сервисов-аналогов — я с лёту парочку попробовал — не совсем то, да и вообще «своя рубаха ближе к телу».
Недавний выход из строя дата центра, и ессно моего сервака — стало последней каплей к написанию сего скрипта.
Идея простая — дёргаем морду сайта — смотрим заголовок ответа — если сменился, кидаем админу (в данном случае мне) смс-ку о смене статуса. Всё это дело загоняем в крон и усё.
Собственно — вот код (всё с комментариями):
В папке где лежит сам скрипт, создаем папочку caсhe, куда кидаем domains.txt со списком чекаемых доменов (страничек) (без http://).
Так же рекомендую бросить в папку файлик .htaccess с содержимым deny from all
Остальные файлы (логи опросов и текущее состояние) должны создаться сами при первом запуске скрипта (прав должно хватить т.к. крон запускается от имени пользователя имеющего доступ к файлам на создание и модификацию).
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
<?php set_time_limit(0); ignore_user_abort(); ini_set(‘display_errors’,1); ini_set(«error_reporting», E_ALL); $PID = getmypid(); $cachedir = «caсhe»; // папочка в которой лежат файлы с данными, сюда же будет складываться лог опроса страничек $mailto = «79131111234@sms.mtslife.ru»; // мыло куда будет кидаться письмо, в данном случае смс $subject = «allert»; // тема письма $message = «»; $arr = file(«./$cachedir/domains.txt»); // файл с доменами которые нужно контролировать $buf = file_get_contents(«./$cachedir/states.txt»); // сюда кидаем текущее состояние сайтов if (strlen($buf)>5) { $states = unserialize($buf); } foreach ($arr as $ar) { $domain = trim($ar,» \r\n\t»); if (empty($domain)) continue; if (!isset($states[$domain])) $states[$domain]=0; $url = «http://».$domain.«/»; $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $buf = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); tolog(«log», $url.«\t».$http_code); if ($states[$domain]!=$http_code) { tolog(«fail», $url.«\t».$states[$domain].«=>».$http_code); $message.= $url.«\n».$states[$domain].«=>».$http_code.«\n»; $states[$domain] = $http_code; } } file_put_contents(«./$cachedir/states.txt», serialize($states)); if (!empty($message)) mail($mailto, $subject, $message); function tolog($filename, $str) { global $PID, $cachedir; $fp = fopen(«./$cachedir/».$filename.«.log»,«a+»); fwrite($fp,$PID.«\t».date(«d.m.Y»).» «.strftime(«\t%H:%M:%S».«\t»)); fwrite($fp,«$str\n»); fclose($fp); } ?> |
16 комментариев на «“Скрипт проверки доступности сайта”»
спасибо за скрипт, копирну себе
Что то у меня ничего не работает =( Может посоветуете хорошие сервис-программки. Заранее спасибо.
идея хорошая попробую наделе что получится
Странно, что кто-то отписывается о неработоспособности, у меня все нормально работает.
[…] скрипт как и предыдущий, контролирующий доступность сервера, нужно было написать ещё 5 лет тому назад. Последней […]
Спасибо за скриптик мне пригодится Автору распект
Спасибо Алексей за скрипт!
Наверное я что-то не так сделал…но с htaccess не заработало, как только удалил его все как часы пошло.
Все равно много ++.
Обычно за деньгу сервисы подобные предоставляют, а тут за так.
Спасибо за скрипт, пригодился!
Сервис проверки доступности сайта — WEBO Pulsar . Мониторит неограниченное количество адресов, отправляет уведомления по e-mail, смс, jabber, выдает трассировку ошибки.
Сервис хороший, но платный.
Мой скрипт можно доработать по функционалу до такого же уровня.
🙂 Скажите автор, а вы не модифицируете этот скрипт, чтобы ТиЦ проверял? Удобно было бы сразу получать уведомления при изменении, ведь интернет не всегда под рукой.
можно, но за отдельную плату
Огласите цену пожалуйста.
Бесплатно проверить доступность домена и хостера можно тут http://sitestatus.ru./
Александр предложенный вами sitestatus.ru это фигня полная. Подобных куча.
Нужно, чтобы он круглосуточно мониторил, а не 1 раз вручную.
Вот что могу посоветовать людям uptimerobot.com — 50 сайтов для чеканья (каждые 5 мин), уведомления в твиттере, по мылу, на мобильный по смс (не для всех операторов).
Вот что при запуске:
Warning: file(./caсhe/domains.txt) [function.file]: failed to open stream: No such file or directory in /var/www/mpost/data/www/site.ru/index.php on line 15
Warning: file_get_contents(./caсhe/states.txt) [function.file-get-contents]: failed to open stream: No such file or directory in /var/www/mpost/data/www/site.ru/index.php on line 16
Warning: Invalid argument supplied for foreach() in /var/www/mpost/data/www/site.ru/index.php on line 21
Notice: Undefined variable: states in /var/www/mpost/data/www/site.ru/index.php on line 43
Warning: file_put_contents(./caсhe/states.txt) [function.file-put-contents]: failed to open stream: No such file or directory in /var/www/mpost/data/www/site.ru/index.php on line 43