Скрипт проверяет контрольные суммы дерикторий и файлов, и отображает изминения в виде дерева.
<?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 utf8');
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>