Показать сообщение отдельно

  #1  
Старый 15.09.2007, 20:34
nc.STRIEM
Members of Antichat - Level 5
Регистрация: 05.04.2006
Сообщений: 1,066
Провел на форуме:
3493315

Репутация: 1228


По умолчанию

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

PHP код:
<?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 
'&nbsp;|&nbsp;&nbsp;';
            
            
$res=mysql_query('SELECT hesh FROM `controlsumm`  WHERE `path`= \''.mysql_escape_string($path).'\' ');
        
            if(!
mysql_num_rows($res))
                echo 
'-&nbsp;<font color=009900>'.basename($path).'</font><br>';
            else
            {
                
$row=mysql_fetch_array($resMYSQL_NUM);
                if(
$row[0] != $hesh)
                    echo 
'-&nbsp;<font color=990000>'.basename($path).'</font><br>';
                else
                    echo 
'-&nbsp;'.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>
 
Ответить с цитированием