|
|
|
| Уважаемые форумчане!
Администрирую каталог сайтов. Хотелось бы реализовать функцию автоматической проверки работоспособности сайтов каталога, который смог бы обойти все сайты (url-ы) хранятся в БД, в случае неработоспособности сайта(ов) отослать мне сообщение.
В литературе соответствующей информации не нашёл. Подскажите пожалуйста, каков принцип работы подобных программ, буду особенно благодарен за источники подробной информации по данному вопросу. | |
|
|
|
|
|
|
|
для: Реаниматолог
(21.09.2009 в 21:44)
| | Запускаете срипт по крону
из Бд выбираете url сайта ,делаете запрос ,смотрите ответ ,если 200 то все нормально ,если другой то отсылается сообщение на ваш почтовый ящик.кроме того есть нюансы ..кроме ответа 200 главной страницы (морды) желательно сканировать все ссылки данного сайта на предмет битости.. | |
|
|
|
|
|
|
|
для: serjinio
(21.09.2009 в 22:21)
| | serjinio, ссылки каталога редиректные. Возможно ли при вызове страницы с редиректом вернуть значения true или false (в зависимости от того, был ли осуществлён переход в итоге) и записать его в переменную? | |
|
|
|
|
|
|
|
для: Реаниматолог
(21.09.2009 в 23:08)
| | >с редиректом вернуть значения true или false (в зависимости от того, был ли осуществлён переход
редирект по сути всего-лишь отправка текста браузеру
, если только роль браузера не будет выполнять ваш-же скрипт переходя всётаки по ссылкам
, статус 200 так-же может возвращаться от запросов припаркованных доменных имён
, которые по сути не являются доменными именами собственно сайтов
, но думаю это небольшой процент
, только ещё есть процент где на сайтах при первом-же обращении вместо 200 тоже редирект , например чтобы перекинуть на раздел сайта на другом языке
// и временная недоступность сайтов тоже возможна | |
|
|
|
|
|
|
|
для: Реаниматолог
(21.09.2009 в 21:44)
| | Вот. Основано на том, что коды ошибок начигаются на 4. В функции mail() в первом аргументе замени email на свой, в 4-ом в заголовке From - на любой, это адрес отправителя. В запросе названия колонок и таблиц звменишь на свои.
<?php
function get_code($hostname,$path = '/',$timeout = 30){
$fp = fsockopen($hostname,80,$errno,$errstr,$timeout);
if (!$fp){return "Ошибка #$errno - $errstr<br>\n";}
else {
$hdr = "GET $path HTTP/1.1\r\n";
$hdr .="Host: $hostname\r\n";
$hdr .="Connection: Close\n\r\n\r";
fwrite($fp,$hdr);
$line = fgets($fp,1024);
fclose($fp);
return $line;
}
}
$list_r = mysql_query("SELECT addr FROM addrlist") or die("Sorry");
while ($list = mysql_fetch_array($дist_r)){
$code = get_code($list[0]);
if (preg_match('#^HTTP/[0-9]\.[0+9]{1}[\s]{1}4[0-9]{2}[\s]{1}[-a-z0-9_\s]*$#is',$code)){
$mail .= "<a href='$list[0]'>$list[0]</a> не найдено!";
}
}
if (!empty($mail)){
mail("your@email.com","Битый сайт",$mail,"Content-type: text/html;charset=windows-1251\r\nFrom: My Responder <myresponder@company.com>\r\n\r\n");
}
?>
|
Я только-что исправил, переписал REGEXP | |
|
|
|