MD 5 cheksum файлов

Статус
В этой теме нельзя размещать новые ответы.
Array ( [T:/home/site/www/file1.php] => d6949cefad9162333a218d09a552b084 [T:/home/site/www/file2.php] => 925b087a2d0364bcb4daec8f2c4541c8 )
 
отлично!
теперь после
PHP:
$aRow = explode(':', trim($fileAndmd5));
ставим

PHP:
print_r($aRow);

что выведет?

и перед
PHP:
foreach ($arr_tmp as $fileAndmd5) {
поставь
PHP:
print_r($arr_tmp);
 
белый экран выводится, ничего не выводит, насчет замены не очень понял т.к. ты же сам писал $filename_filelist = 'md5_log/file.list';
$filename_md5hash = 'md5_log/md5.hash';
$arr = file($filename_filelist);
$arr_tmp = file($filename_md5hash);
$arr_md5 = array();

код сейчас у меня имеет вид
PHP:
$filename_filelist = 'md5_log/file.list';
$filename_md5hash = 'md5_log/md5.hash';
$arr = file($filename_filelist); 
$arr_tmp = file($filename_md5hash);
$arr_md5 = array();
// считываем md5.hash в ассоц.массив
foreach ($arr_tmp as $fileAndmd5) { 
  $aRow = explode(':', trim($fileAndmd5));
  if (sizeof($aRow) == 2) {
    $arr_md5[trim($aRow[0])] = trim($aRow[1]); // пара Имя файла -> md5
  }
}



//проход по именам файлов и проверка md5
$md5_changed = false;
foreach ($arr as $value) { 
  $curfile = trim($value);
  if (file_exists($curfile)) {
    $md5_org = $arr_md5[$curfile];
    $md5_curfile = @md5_file($curfile); 
    if (strlen($md5_org) > 0) {
      // контр сумма для текущего файла уже подсчитана - проверим
      
      
      if ($md5_org !=$md5_curfile) {
        /*$message = "В последний раз файл <br>" . $curfile . " был изменен: " . date("d-Y-H:i:s.", 
        @filemtime($curfile)) . " MD5 файла: " . @md5_file($curfile) . " Размер файла: " . @filesize($curfile) . " байт"; 
    echo ("<br>Информация об измененных файлах отправлена на емайл: <br> " . $curfile . 
        "<br>"); 
    @mail('noreply@bk.ru', 
        'Сообщение об изменение МД5 суммы файлов на сервере : http://' . $_SERVER['SERVER_NAME'] . 
        $cur_file, $message); */
        
        
        echo " sdfsdf" ;
        // запомним новую md5
        $arr_md5[$curfile] = $md5_curfile;
        $md5_changed = true;
      }
    } else {
      // для этого файла md5 еще не рассчитывалась
      $arr_md5[$curfile] = $md5_curfile;
      $md5_changed = true;
    }
  }
}

print "<pre>";
print_r($arr_md5); 

if ($md5_changed) 
{
  // записываем в файл md5.hash измененный ассоц массив
  rename($filename_md5hash, $filename_md5hash . '.bak');
  $fp = fopen($filename_md5hash, 'w'); 
  foreach($arr_md5 as $curfile => $curmd5) {
    fwrite($fp, "$curfile:$curmd5\n"); 
  }
  fclose($fp); 
  unlink($filename_md5hash . '.bak');
}
уже не понимаю где ошибка даже...

Добавлено через 9 минут
отлично!
теперь после
PHP:
$aRow = explode(':', trim($fileAndmd5));
ставим

PHP:
print_r($aRow);
что выведет?

и перед
PHP:
foreach ($arr_tmp as $fileAndmd5) {
поставь
PHP:
print_r($arr_tmp);
HTML:
Array
(
    [0] => T
    [1] => /home/site/www/file1.php
    [2] => d6949cefad9162333a218d09a552b084
)
 Array
(
    [0] => T
    [1] => /home/site
/www/file2.php
    [2] => 783f7e206a710fc1ce8d600966d480ec
)
 
Все ясно, под виндами в пути тоже есть ':'

заменяем
PHP:
$aRow = explode(':', trim($fileAndmd5));
на
PHP:
$aRow = explode('|', trim($fileAndmd5));

и удаляем файл 'md5_log/md5.hash, чтобы он заново перестроился
 
Все ясно, под виндами в пути тоже есть ':'

заменяем
PHP:
$aRow = explode(':', trim($fileAndmd5));
на
PHP:
$aRow = explode('|', trim($fileAndmd5));
и удаляем файл 'md5_log/md5.hash, чтобы он заново перестроился
распечатываю
PHP:
 print " <pre>" ;
  print_r($aRow);
получаю
HTML:
Array
(
    [0] => T:/home/v-nedv/site/file1.php:d6949cefad9162333a218d09a552b084
)
 Array
(
    [0] => T:/home/site/www/file2.php:abc555f199e6c31855d99866a5722477
)
PHP:
if ($md5_org !=$md5_curfile) {
        /*$message = "В последний раз файл <br>" . $curfile . " был изменен: " . date("d-Y-H:i:s.", 
        @filemtime($curfile)) . " MD5 файла: " . @md5_file($curfile) . " Размер файла: " . @filesize($curfile) . " байт"; 
    echo ("<br>Информация об измененных файлах отправлена на емайл: <br> " . $curfile . 
        "<br>"); 
    @mail('noreply@bk.ru', 
        'Сообщение об изменение МД5 суммы файлов на сервере : http://' . $_SERVER['SERVER_NAME'] . 
        $cur_file, $message); */
        
        
        echo " sdfsdf" ;
        // запомним новую md5
        $arr_md5[$curfile] = $md5_curfile;
        $md5_changed = true;
      }
условие вроде не срабатывает т.к.
PHP:
  echo " sdfsdf" ;
не вывоится


PHP:
 $md5_org = $arr_md5[$curfile];
при распечатке пустая перменная...



PHP:
  if (file_exists($curfile))
    {
        $md5_org = $arr_md5[$curfile];
      
 
        $md5_curfile = @md5_file($curfile);
      
        echo strlen($md5_curfile); // выводит 3232
       // echo   strlen($md5_org); //выводит 00
        if (strlen($md5_org) > 0)
тоже непонятка какаято, мне кажется ошибка в этом участке тоже есть, но не могу понять....

если меняю
HTML:
if (strlen($md5_org) > 0)
на
PHP:
 if (strlen($md5_curfile) > 0)

то он отправляет на емайл и выводит сообшения что эти 2 файла из спика были изменены , даже если они не были изменены
 
PHP:
$md5_org = $arr_md5[$curfile];
      echo $md5_org;

ничего не выводит, а
PHP:
 $md5_curfile = md5_file($curfile);
       echo $md5_curfile . "<br>";
выводит
HTML:
e0d85b6024c1316e2922f211e5ee788d
a7e36ecd982e396f0976969ee374e5fb
 
здесь тоже надо ':' заменить на '|'

PHP:
foreach($arr_md5 as $curfile => $curmd5) {
    fwrite($fp, "$curfile:$curmd5\n"); 
}

на

PHP:
foreach($arr_md5 as $curfile => $curmd5) {
    fwrite($fp, "$curfile|$curmd5\n"); 
}
 
да спасибо это сработало, и у меня остался последний вопрос, если были изменены несоклько файлов присылаются отдельный емайл для каждого файла, а мне нужно чтобы все приходило в одном письме, не мог подсказать, я пробовал закончить цикл раньше , но тогда перестает быть доступна $curfile
 
да спасибо это сработало, и у меня остался последний вопрос, если были изменены несоклько файлов присылаются отдельный емайл для каждого файла, а мне нужно чтобы все приходило в одном письме, не мог подсказать, я пробовал закончить цикл раньше , но тогда перестает быть доступна $curfile

В цикле формируем переменную $message для отсылки сообщения на email, но на email ее отправляем только после выхода из цикла.
Обрати внимание, что перед знаком '=' стоит точка, что означает накопление нескольких строк в переменной:

PHP:
$message .= "В последний раз...

Код теперь выглядит так:
PHP:
$message = '';
$filename_filelist = 'md5_log/file.list';
$filename_md5hash = 'md5_log/md5.hash';
$arr = file($filename_filelist); 
$arr_tmp = file($filename_md5hash);
$arr_md5 = array();
// считываем md5.hash в ассоц.массив
foreach ($arr_tmp as $fileAndmd5) { 
  $aRow = explode('|', trim($fileAndmd5));
  if (sizeof($aRow) == 2) {
    $arr_md5[trim($aRow[0])] = trim($aRow[1]); // пара Имя файла -> md5
  }
}
//проход по именам файлов и проверка md5
$md5_changed = false;
foreach ($arr as $value) { 
  $curfile = trim($value);
  if (file_exists($curfile)) {
    $md5_org = $arr_md5[$curfile];
    $md5_curfile = @md5_file($curfile); 
    if (strlen($md5_org) > 0) {
      // контр сумма для текущего файла уже подсчитана - проверим
      if ($md5_org !=$md5_curfile) {
        $message .= "В последний раз файл " . $curfile . " был изменен: " . date("d-Y-H:i:s.", 
        @filemtime($curfile)) . " MD5 файла: " . @md5_file($curfile) . " Размер файла: " . @filesize($curfile) . " байт\n"; 
    echo ("<br>Информация об измененных файлах отправлена на емайл: <br> " . $curfile . 
        "<br>"); 
       
        // запомним новую md5
        $arr_md5[$curfile] = $md5_curfile;
        $md5_changed = true;
      }
    } else {
      // для этого файла md5 еще не рассчитывалась
      $arr_md5[$curfile] = $md5_curfile;
      $md5_changed = true;
    }
  }
}

print "<pre>";
print_r($arr_md5); 

if ($md5_changed) 
{
  // записываем в файл md5.hash измененный ассоц массив
  rename($filename_md5hash, $filename_md5hash . '.bak');
  $fp = fopen($filename_md5hash, 'w'); 
  foreach($arr_md5 as $curfile => $curmd5) {
    fwrite($fp, "$curfile|$curmd5\n"); 
  }
  fclose($fp); 
  unlink($filename_md5hash . '.bak');
}
if (strlen($message) > 0) {
    @mail('noreply@bk.ru', 'Сообщение об изменение МД5 суммы файлов на сервере : http://' . $_SERVER['SERVER_NAME'], $message);
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху