<?
// НАСТРОЙКИ:
$domain = 'site.ru'; // домен сайта
$utf = false; // поставьте true, если сайт в кодировке utf8 (в PHP должен быть подключен модуль mb_string)
$no_tags = true; // удалять все HTML-теги. Поставьте false, если не требуется
// ---------------------------------
// ЗАПУСКАЕМ ПРОВЕРКУ
$pages = array();
$cur_path = dirname(__FILE__).'/';
set_time_limit(0); // скрипт живет вечно
$last_data = array();
$last_data_file = $cur_path.'last_data.dat';
// возьмем первую страницу
$first_page = file_get_contents('http://'.$domain.'/');
// парсим на предмет ссылок
$matches = array();
if (!$first_page || !preg_match_all('#<a[^>]+href=["\']?([^\'" >]+)["\' >]?#sim', $first_page, $matches))
die('Connection refused!');
$pages[] = 'http://'.$domain.'/';
foreach($matches[1] as $link) {
if (strpos($link, 'mailto:')!==false)
continue;
if (($k=strpos($link, '#'))!==false)
$link = substr($link, 0, $k);
if (strpos($link, 'http://')===false)
$pages[] = 'http://'.$domain. '/' . ltrim($link, '/');
elseif(strpos($link, $domain)!==false)
$pages[] = $link;
}
$pages = array_unique($pages);
//возьмем предыдущую информацию, если она есть
if (is_file($last_data_file)) {
$file = file_get_contents($last_data_file);
if ($file && ($k = @unserialize($file)))
$last_data = $k;
}
// создадим папку логов
if (!is_dir($cur_path.'pages') && !mkdir($cur_path.'pages'))
die ('Не удается создать директорию: '.$cur_path.'pages');
// пройдемся по страницам и попробуем их получить
foreach($pages as $url) {
$url = (string) $url;
$content = file_get_contents($url); // получаем
if ($utf) $content = mb_convert_encoding($content, 'cp1251', 'utf8');
if ($no_tags) $content = strip_tags($content); // убираем теги
if (!isset($last_data[$url]) || $last_data[$url] != $content) { // нашли различие
$fp = fopen($cur_path.'differences.log', 'a+');
$log = date('Y.m.d H:i:s') . " Изменилась страница $url \r\n";
fwrite($fp, $log);
fclose($fp);
// сохраним эту страницу
$dirsave = $cur_path.'pages/'.date('Y.m.d H-00-00').'/';
if (!is_dir($dirsave)) mkdir($dirsave);
$replacements = array();
$replacements[] = '\\';
$replacements[] = '/';
$replacements[] = '&';
$replacements[] = '?';
$replacements[] = ':';
$filename = str_replace($replacements, '_', $url);
$fp = fopen($dirsave . $filename, 'w');
fwrite($fp, $content);
fclose($fp);
}
$last_data[$url] = $content; // запоминаем текущее состояние страницы
}
// сохраним текущее состояние
$fp = fopen($last_data_file, 'w');
fwrite($fp, serialize($last_data));
fclose($fp);
?>