.
Место для Вашей рекламы
19 Август 2010

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

posted in Полезности, Программирование |

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

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

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

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

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

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 комментариев на запись “Скрипт проверки доступности сайта”

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

  1. 1 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

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

Яндекс.Метрика