Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: MD 5 cheksum файлов
 
 автор: Tycoon   (20.04.2009 в 15:12)   письмо автору
 
 

написал скрипт который отслеживает изменения в заданных файлах, которые находятся в
md5_log/file.list


список файлов :
T:/home/server/www/spy2.php
T:/home/server/www/spy.php
T:/home/server/www/fs.php
T:/home/server/www/scan_dir.php
T:/home/server/www/chekmd5.php
T:/home/server/www/md5.php




//////////////////////////////////
$arr = file("md5_log/file.list"); // чита в массив список файлов
foreach ($arr as $value)
{

   echo "File $value  <br>";  // обпрабатываю их в цикле, хочу получить все значения


/////////////////////////////////////
$files = $value; // записываю все значения в новую перменную
/********************** сравниваю           *******************************/
    $file_md5 = "md5_log/md5.hash"; //
$md5_new_file = trim(@md5_file($files));
$md5_old_file = trim(file_get_contents($file_md5));

if ($md5_new_file <> $md5_old_file)
{
    echo "Файл был изменен";
    rename($file_md5, $file_md5 . ".bak");
    $fp = fopen($file_md5, 'w');
    fwrite($fp, $md5_new_file);
    fclose($fp);
    ///////////////// crontab

    $message = "В последний раз файл <br>" . $files . " был изменен: " . date("d-Y-H:i:s.",
        @filemtime($files)) . " MD5 файла: " . @md5_file($files) . " Размер файла: " . @
        filesize($files) . " байт";

    echo ("<br>Информация об измененных файлах отправлена на емайл: <br> " . $files .
        "<br>");
    @mail('noreply@bk.ru',
        'Сообщение об изменение МД5 суммы файлов на сервере : http://' . $_SERVER['SERVER_NAME'] .
        $value, $message);

    ////////////////////////////////////////////////////////////////
    unlink($file_md5 . ".bak");
}

//
else
{
    echo "Ничего не изменилось";
}
}


проблема в том что когда делаю
print "<pre>" ;
print_r($arr);


распечатывается:

Array
(
    [0] => T:/home/server/www/spy2.php

    [1] => T:/home/server/www/spy.php

    [2] => T:/home/server/www/fs.php

    [3] => T:/home/server/www/scan_dir.php

    [4] => T:/home/server/www/chekmd5.php

    [5] => T:/home/server/www/md5.php
)
Файл был изменен
Информация об измененных файлах отправлена на емайл: 
 T:/home/server/www/spy2.php

Array
(
    [0] => T:/home/server/www/spy2.php

    [1] => T:/home/server/www/spy.php

    [2] => T:/home/server/www/fs.php

    [3] => T:/home/server/www/scan_dir.php

    [4] => T:/home/server/www/chekmd5.php

    [5] => T:/home/server/www/md5.php
)
Ничего не изменилось

Array
(
    [0] => T:/home/server/www/spy2.php

    [1] => T:/home/server/www/spy.php

    [2] => T:/home/server/www/fs.php

    [3] => T:/home/server/www/scan_dir.php

    [4] => T:/home/server/www/chekmd5.php

    [5] => T:/home/server/www/md5.php
)
Ничего не изменилось

Array
(
    [0] => T:/home/server/www/spy2.php

    [1] => T:/home/server/www/spy.php

    [2] => T:/home/server/www/fs.php

    [3] => T:/home/server/www/scan_dir.php

    [4] => T:/home/server/www/chekmd5.php

    [5] => T:/home/server/www/md5.php
)
Ничего не изменилось

Array
(
    [0] => T:/home/server/www/spy2.php

    [1] => T:/home/server/www/spy.php

    [2] => T:/home/server/www/fs.php

    [3] => T:/home/server/www/scan_dir.php

    [4] => T:/home/server/www/chekmd5.php

    [5] => T:/home/server/www/md5.php
)
Ничего не изменилось

Array
(
    [0] => T:/home/server/www/spy2.php

    [1] => T:/home/server/www/spy.php

    [2] => T:/home/server/www/fs.php

    [3] => T:/home/server/www/scan_dir.php

    [4] => T:/home/server/www/chekmd5.php

    [5] => T:/home/server/www/md5.php
)
Файл был изменен
Информация об измененных файлах отправлена на емайл: 
 T:/home/server/www/md5.php


изменения были тока в 1 файле : T:/home/server/www/md5.php , но почему то первый файл в списке


Файл был изменен
Информация об измененных файлах отправлена на емайл: 
 T:/home/server/www/spy2.php


сообщается что он тоже был изменен а на самом деле он не был изменен, и если я изменю други файлы из списка , сообщение и емайла нету о том что они были изменены....

  Ответить  
 
 автор: Лерк   (20.04.2009 в 18:51)   письмо автору
 
   для: Tycoon   (20.04.2009 в 15:12)
 

Проверьте файл "md5_log/md5.hash". Судя по коду, там всего один хеш.

ЗЫ На время отладки уберите "собаки" около функций.

  Ответить  
 
 автор: Trianon   (20.04.2009 в 19:08)   письмо автору
 
   для: Tycoon   (20.04.2009 в 15:12)
 

Вам не кажется, что Вы храните всего один хеш?

  Ответить  
 
 автор: Tycoon   (21.04.2009 в 08:23)   письмо автору
 
   для: Trianon   (20.04.2009 в 19:08)
 

пробую записать хеши всех файлов
<?php

/**
 * @author 
 * @copyright 2009
 */

//////////////////////////////////  читаю файлы из списка
$arr file("md5_log/file.list");
foreach (
$arr as $files)
{


    echo 
"File $files  <br>";

}
/////////////////////////////////////  записываю мд 5 хеши прочитанных файлов из списка


$fp1 fopen("md5_log/md5.hash"'w+');
foreach (
$arr as $value)
{
    
$files trim($value);
    
fwrite($fp1md5_file($files) . "\n");


}
fclose($fp1);
//////////////////////////////////////////// считываю МД 5 хеши файлов из списка


$file_md5 file("md5_log/md5.hash");
foreach (
$file_md5 as $md5)
{
    
//echo $md5 . "<br>";


    
$md5_new_file $md5// записываю их в новую переменную $md5_new_file

    
print_r($md5_new_file "<br>"); // распечатываю

}
///////////////////////////////////////////////
$md5_old_file file_get_contents($file_md5); // создается новая перменная $md5_old_file в которую считываю содержимое массива  $file_md5

if ($md5_new_file <> $md5_old_file// сравниваю

{
    
// echo "Файл был изменен";
    
rename($file_md5$file_md5 ".bak");
    
$fp fopen($file_md5'w');
    
fwrite($fp$md5_new_file);
    
fclose($fp);
    
///////////////// crontab

    
$message "В последний раз файл <br>" $files " был изменен: " date("d-Y-H:i:s.",
        @
filemtime($files)) . " MD5 файла: " . @md5_file($files) . " Размер файла: " . @
        
filesize($files) . " байт";

    echo (
"<br>Информация об измененных файлах отправлена на емайл: <br> " $files .
        
"<br>");
    @
mail('noreply@bk.ru',
        
'Сообщение об изменение МД5 суммы файлов на сервере : http://' $_SERVER['SERVER_NAME'] .
        
$value$message);

    
////////////////////////////////////////////////////////////////
    
unlink($file_md5 ".bak");
}

//
else
{
    echo 
"Ничего не изменилось";
}



?>


на емайл приходит 1сообщений об изменении T:/home/v-nedv/www/md5.php (фаqл который запускает этот скрипт) jоб изменений в других файлах сообщений нету

  Ответить  
 
 автор: Trianon   (21.04.2009 в 10:48)   письмо автору
 
   для: Tycoon   (21.04.2009 в 08:23)
 

В каком виде у Вас хранятся (в смысле - должны храниться) данные по хешам нескольких файов?

И что означает каждая переменная?
Потому как названы они настолько однотипно, что наталкиваясь на очередную фариацию из file и md5,просто теряешь нить мысли.

  Ответить  
 
 автор: Tycoon   (21.04.2009 в 12:33)   письмо автору
 
   для: Trianon   (21.04.2009 в 10:48)
 

MD5 хранятся в виде:
dffc34a6e0445e6afcf6bc679ad2f98e
ec8afa8a1574dd4bb422c1b10e95bcab
239e60a5cd2c44da48db2e60c2570427
5160bd6c3f86b8044e84cfe1f76f82cd
e10301032472c55c8fe69410ff013f3c
643dbb1fcf54529637d6b4e54dfdd982

  Ответить  
 
 автор: Trianon   (21.04.2009 в 18:42)   письмо автору
 
   для: Tycoon   (21.04.2009 в 12:33)
 

и как отсюда можно понять, какой хеш соответствует какому файлу?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования