{% else-1 %}
Скрипт проверяет контрольные суммы дерикторий и файлов, и отображает изминения в виде дерева.

                        
<?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>
0 40 0
Без комментариев...