E blog

Новостной блог, раскрутка, заработок в интернете, разработка сайтов, seo, оптимизация сайта, дизайн сайтов, поисковая оптимизация

Скрипт отслеживания изменений в файлах

Posted on | августа 23, 2010 | No Comments

apple_worm

Этoт скрипт кaк и прeдыдущий, , нужнo былo нaписaть eщё 5 лeт тoму нaзaд. Пoслeднeй кaплeй спoдвинувшeй стaл , в рeзультaтe чeгo сильнo пoпaдaли позиции :(

В общем идея как всегда очень простая, даже не знаю почему хостеры не предоставляют подобный функционал:

Раз в (период времени) делается «снимок» файловой системы (например корневой каталог вашего сайта) с учётом поддиректорий (в принципе в список можно добавить исключения) и сливается с результатами снимка сделанного за предыдущий запуск скрипта, если есть разногласия в размерах файлов (сначала md5 делал — в конечном итоге подумал, что достаточно и размера ...) информируем владельца сайта о найденных разногласиях.

По началу сваял скрипт не используя выгрузки в файлы — всё на массивах, но он не выдержал проверки моего основного рабочего домена — там сотни тысяч файлов — сдох по нехватке памяти.

После чего вообще решил только практически на командах ОС всё сделать «ls -lR» + «diff», но так и не получилось вывести в ls файлы с полным абсолютным путём,  в конечном итоге получился некий симбиоз который и выкладываю на ваш суд:

set_time_limit(0); 
 ignore_user_abort(); 
   
 ini_set('display_errors',1); 
 ini_set("error_reporting", E_ALL); 
   
 // папочка, которую контролируем (включая подпапки) 
 $rootdir = "./"; 
 // куда кладём инфу о изменениях 
 $diffdir = "./diffdir/"; 
   
 // настройки для оповещения мылом 
 $mailto  = "admin@gmail.com"; 
 $subject = "Allert"; 
 $message = ""; 
   
 include_once("dBug.php"); // этот дебаг класс для отображения расхождений, берём тута  http://dbug.ospinto.com 
   
 // если id задан смотрим старые изменения по номеру 
 if (isset($_GET['id'])) { 
 $id = $_GET['id']; 
 $buf = file_get_contents($diffdir.$id); 
 new dBug(unserialize($buf)); 
 die(); 
 } 
   
 if (!rename($diffdir."curr.txt", $diffdir."old.txt")) { 
 dir("rename error"); 
 } 
   
 $fp = fopen($diffdir."curr.txt","a+"); 
 //собираем длинны всех файлов указанной директории $rootdir 
 checkmd($rootdir); 
 fclose($fp); 
   
 // непосредственно сравнивает два файла (средствами команды ОС diff) 
 exec("diff ".$diffdir."curr.txt ".$diffdir."old.txt >".$diffdir."diff.txt"); 
   
 // обрабатываем и выплёвываем в удобный нам вид результат предыдущей команды 
 $arr = file($diffdir."diff.txt"); 
 foreach ($arr as $ar) { 
 $str = trim($ar," \r\n\t"); 
 @list($dir,$len,$file) = split(" ",$str); 
 if (!isset($file)) continue; 
 // пропускаем файлы из папки diffstat 
 if (strstr($file,$diffdir)) continue; 
   
 $diff[$file][$dir] = $len; 
 $message.=$file."\t".$dir." ".$len."\n"; 
 } 
 // оповещаем о изменениях на мыло 
 if (!empty($diff)) { 
 mail($mailto, $subject, $message); 
 file_put_contents($diffdir.time(),serialize($diff)); 
 new dBug($diff); 
 } else { 
 echo "changes not found"; 
 } 
   
 // функция сбора информации о файлах в директории 
 function checkmd($cat) { 
 global $fp; 
 $dir = dir($cat); 
 while($file = $dir->read()) { 
 if ($file=='.' or $file=='..') continue; 
 if (is_dir($cat.$file)) { 
 checkmd($cat.$file.'/'); 
 } 
 $md5 = filesize($cat.$file); 
 fwrite($fp,$md5." ".$cat.$file."\n"); 
 } 
 }

© - деньги из паутины

Comments

Leave a Reply

You must be logged in to post a comment.

  • Самые обсуждаемые новости


  • Warning: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: hr line 5 and body in Entity, line: 6 in /var/www/studioseo/data/www/blogs.studio-seo.org/wp-content/plugins/advanced-rss/php5.php on line 721

    Warning: DOMDocument::loadXML() [domdocument.loadxml]: Opening and ending tag mismatch: body line 3 and html in Entity, line: 7 in /var/www/studioseo/data/www/blogs.studio-seo.org/wp-content/plugins/advanced-rss/php5.php on line 721

    Warning: DOMDocument::loadXML() [domdocument.loadxml]: Premature end of data in tag html line 1 in Entity, line: 13 in /var/www/studioseo/data/www/blogs.studio-seo.org/wp-content/plugins/advanced-rss/php5.php on line 721