.
27 сентября 2010

Модификация скрипта доступности сайта

posted in SEO, Программирование |

Как показала практика Скрипт проверки доступности сайта не оправдал возложенных на него функций — проверка изначально была не правильно задумана.

Так в субботу вечером у меня ни с того, ни с сего завалился mysql, а точнее системная таблица с правами пользователей. Таким образом сам веб сервер то работал — на GET запрос давал 200 OK — но по факту — лежим ... Состояние для выяснения и решения проблемы у меня было не соответствующее (количество выпитого пива и съеденного мяса давало о себе знать), поэтому решил вопрос только в воскресенье — а это значит, что сервер со всеми возложенными на него задачами слёг на 12 часов !

В общем скрипт я модифицировал, на проверку тега Title — если изменился — тогда уже кричим alarm — на заданные адреса отсылаем письма и sms.

Кому интересно — жмём далее и смотрим полный код.


set_time_limit(0);
ignore_user_abort();

ini_set('display_errors',1);
ini_set("error_reporting", E_ALL);

$PID = getmypid();

$cachedir = "gtinc";
$mailto  = array("7913.......@sms.mtslife.ru",".........@gmail.com");
$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);
sleep(30);
//        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if (stristr($buf,"utf-8")) { $buf = mb_convert_encoding($buf, "WINDOWS-1251","UTF-8"); }

if (preg_match("!<title>(.*?)</title>!ism",$buf,$match)) {  $title = $match[1]; } else { $title = 0; }

$md5 = md5($title);

tolog("log", $url."\t".$md5."\t".$states[$domain]."\t".$title);

if ($states[$domain].""!=$md5."") {
tolog("fail", $url."\t".$states[$domain]."=>".$md5);
$message.= $url."\n".$states[$domain]."=>".$md5."\n".$title."\n";
$states[$domain] = $md5;
}
}
file_put_contents("./$cachedir/states.txt", serialize($states));

if (!empty($message)) { foreach ($mailto as $mail) { file_put_contents("./$cachedir/mail.txt",$subject."\n\n".$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);
}
Яндекс.Метрика