<?php set_time_limit(300); $SALT = 'sdfsd'; $mysql=array( 'host' => 'localhost', 'user' => 'root', 'pass' => '', 'base' => 'mydb' ); if (mysql_connect($mysql['host'],$mysql['user'],$mysql['pass']) == false) die(mysql_error()); @mysql_query('SET NAMES cp1251'); if (mysql_select_db($mysql['base']) == false) die(mysql_error()); $ALLFILES=array(); /*****************************************************************************************************************************/ function install() { mysql_query('DROP TABLE IF EXISTS `controlsumm`'); $qyery='CREATE TABLE `controlsumm` ( `path` VARCHAR(256), `hesh` VARCHAR(32) )'; if(mysql_query($qyery)) echo '<center><h2>Таблица `controlsumm` была создана.</h2></center>'; else echo '<center><h2>Ошибка! не удалось создать таблицу `controlsumm`.</h2></center>'; } /*****************************************************************************************************************************/ function FileHash($file) { GLOBAL $SALT; $hash=md5($file.$SALT); $fo=fopen($file,'r'); while(!feof($fo)) { $content=fread($fo,1024); $hash=md5($hash.$content); } fclose($fo); return $hash; } /*****************************************************************************************************************************/ function kolzn($str, $zn) { $kol=0; $i=strlen($str); for($j=0;$j<$i;$j++) if($str[$j] == $zn) $kol++; return $kol; } /*****************************************************************************************************************************/ function makedamp($dir) { GLOBAL $SALT; $hesh=''; $dirhesh='00000000000000000000000000000000'; $diradesk = opendir($dir); while(false !== ($name = readdir($diradesk))) { if($name == '.' || $name == '..') continue; if(filetype($dir.'/'.$name) == 'dir') $hesh=makedamp($dir.'/'.$name); else $hesh=FileHash($dir.'/'.$name); if(!mysql_query('INSERT INTO `controlsumm` VALUES (\''.mysql_escape_string($dir.'/'.$name).'\', \''.$hesh.'\')')) die(mysql_error()); $dirhesh=md5($hesh.$dirhesh); } return md5($dirhesh.$SALT); } /*****************************************************************************************************************************/ function checkall($dir) { GLOBAL $SALT,$ALLFILES; $hesh=''; $dirhesh='00000000000000000000000000000000'; $diradesk = opendir($dir); while(false !== ($name = readdir($diradesk))) { if($name == '.' || $name == '..') continue; if(filetype($dir.'/'.$name) == 'dir') { $ALLFILES[$dir.'/'.$name] = 1;; $hesh=checkall($dir.'/'.$name); $ALLFILES[$dir.'/'.$name] = $hesh; } else { $hesh=FileHash($dir.'/'.$name); $ALLFILES[$dir.'/'.$name] = $hesh; } $dirhesh=md5($hesh.$dirhesh); } return md5($dirhesh.$SALT); } /*****************************************************************************************************************************/ function viewtree() { GLOBAL $SALT,$ALLFILES; checkall('.'); foreach($ALLFILES as $path => $hesh) { for($i=kolzn($path, '/');$i>0;$i--) echo ' | '; $res=mysql_query('SELECT hesh FROM `controlsumm` WHERE `path`= \''.mysql_escape_string($path).'\' '); if(!mysql_num_rows($res)) echo '- <font color=009900>'.basename($path).'</font><br>'; else { $row=mysql_fetch_array($res, MYSQL_NUM); if($row[0] != $hesh) echo '- <font color=990000>'.basename($path).'</font><br>'; else echo '- '.basename($path).'<br>'; } } } /*****************************************************************************************************************************/ ?> <style> table.menu{ background-color: #ffffff; font-size:16px; color:#000000; text-align: center; font-family: Cursive; border:1px solid #cccccc; width: 100%; margin-top:5px; link: ffffff; } td.i { link: ffffff; border:1px solid #cccccc; font-size:13px; color: #000000; text-align: center; color:#333333; width: 11%; } input,SELECT {border:1px solid #cccccc; height: 20px;} #a{ font-size:11px; color:#333333; text-align: center; font-family: Cursive; } a{color:#999999;} </style> <script> function refreshtable() { if(confirm('Уверенны что хотите обновить таблицу хэшей?')) document.location='?p=hesh'; } function createtable() { if(confirm('Уверенны что хотите создать таблицу?')) document.location='?p=install'; } </script> <table width=80% align=center> <tr><td> <table class=menu align=center><tr> <td><a href='?p=tree'>[Дерево]</a></td> <td><a href='JavaScript:refreshtable()'>[Хэшировать]</a></td> <td><a href='JavaScript:createtable()'>[Установить]</a></td> </tr></table> </td></tr> <tr><td align=center> <br> <table style="border:1px solid #cccccc;" width=100%><tr><td align=left> <?php switch($_GET['p']) { case 'tree': viewtree(); break; case 'hesh': if(!mysql_query('DELETE FROM `controlsumm`')) die(mysql_error()); makedamp('.'); viewtree();break; case 'install': install(); break; default: viewtree(); } ?> </td></tr></table> </td></tr> </table>