.
19 августа 2010

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5.00 из 5)
posted in Полезности, Программирование |

pulse
Давненько уже собирался написать маленький, но ИМХО очень полезный скриптик — контроль работоспособности сайтов.
Вроде существует достаточно сервисов-аналогов — я с лёту парочку попробовал — не совсем то, да и вообще «своя рубаха ближе к телу».

Недавний выход из строя дата центра, и ессно моего сервака — стало последней каплей к написанию сего скрипта.

Идея простая — дёргаем морду сайта — смотрим заголовок ответа — если сменился, кидаем админу (в данном случае мне) смс-ку о смене статуса. Всё это дело загоняем в крон и усё.

Собственно — вот код (всё с комментариями):

В папке где лежит сам скрипт, создаем папочку caсhe, куда кидаем domains.txt со списком чекаемых доменов (страничек) (без http://).
Так же рекомендую бросить в папку файлик .htaccess с содержимым deny from all
Остальные файлы (логи опросов и текущее состояние) должны создаться сами при первом запуске скрипта (прав должно хватить т.к. крон запускается от имени пользователя имеющего доступ к файлам на создание и модификацию).

<?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);
}
 
?>

Post to Twitter ReTweet

Похожие статьи

У нас куча комментариев (16) на запись “Скрипт проверки доступности сайта”

Почему бы Вам не высказать своем мнение! Позвольте нам узнать, что Вы думаете...

  1. 1 On 19.08.2010, Александр said:

    спасибо за скрипт, копирну себе

  2. 2 On 19.08.2010, Puma said:

    Что то у меня ничего не работает =( Может посоветуете хорошие сервис-программки. Заранее спасибо.

  3. 3 On 20.08.2010, макс said:

    идея хорошая попробую наделе что получится

  4. 4 On 20.08.2010, Jungle said:

    Странно, что кто-то отписывается о неработоспособности, у меня все нормально работает.

  5. 5 On 23.08.2010, Скрипт отслеживания изменений в файлах | Заработок в сети - о способах и инструментах said:

    [...] скрипт как и предыдущий, контролирующий доступность сервера, нужно было написать ещё 5 лет тому назад. Последней [...]

  6. 6 On 02.09.2010, Максим said:

    Спасибо за скриптик мне пригодится Автору распект

  7. 7 On 05.09.2010, Евгений said:

    Спасибо Алексей за скрипт!

    Наверное я что-то не так сделал...но с htaccess не заработало, как только удалил его все как часы пошло.

    Все равно много ++.

    Обычно за деньгу сервисы подобные предоставляют, а тут за так.

  8. 8 On 10.09.2010, Верн said:

    Спасибо за скрипт, пригодился!

  9. 9 On 28.09.2010, webo said:

    Сервис проверки доступности сайта — WEBO Pulsar . Мониторит неограниченное количество адресов, отправляет уведомления по e-mail, смс, jabber, выдает трассировку ошибки.

  10. 10 On 29.09.2010, GTAlex said:

    Сервис хороший, но платный.

    Мой скрипт можно доработать по функционалу до такого же уровня.

  11. 11 On 07.10.2010, Евгений said:

    :) Скажите автор, а вы не модифицируете этот скрипт, чтобы ТиЦ проверял? Удобно было бы сразу получать уведомления при изменении, ведь интернет не всегда под рукой.

  12. 12 On 08.10.2010, GTAlex said:

    можно, но за отдельную плату

  13. 13 On 09.10.2010, Евгений said:

    Огласите цену пожалуйста.

  14. 14 On 22.10.2010, Александр said:

    Бесплатно проверить доступность домена и хостера можно тут sitestatus.ru./

  15. 15 On 04.11.2010, Евгений said:

    Александр предложенный вами sitestatus.ru это фигня полная. Подобных куча.

    Нужно, чтобы он круглосуточно мониторил, а не 1 раз вручную.

    Вот что могу посоветовать людям uptimerobot.com — 50 сайтов для чеканья (каждые 5 мин), уведомления в твиттере, по мылу, на мобильный по смс (не для всех операторов).

  16. 16 On 12.02.2011, Юрий said:

    Вот что при запуске:

    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

  17. Always Last said:
    Самое обсуждаемое на блогах:
    лиц Владимира Путина
    между представителями РФ и Катара в ООН
    о химической кастрации педофилов

Оставить комментарий

  • Ссылочки