За последние 24 часа нас посетили 55330 программистов и 1787 роботов. Сейчас ищут 866 программистов ...

Помогите допилить файловый сканер

Тема в разделе "PHP для новичков", создана пользователем viphost, 6 фев 2013.

  1. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    Есть сканер
    Код (Text):
    1. <?php
    2.   ///////////////////////////////////////////////////////////////////////////
    3.   //       Файл-чекер  -  автоматический мониториг изменений файлов сайта     //
    4.   //                                                                       //
    5.   //                     Воробьев Денис, 2005-2007                         //                       //
    6.   //                                                                       //
    7.   //          FileChecker 2.1 by Denvor http://denvor.ru                   //
    8.   ///////////////////////////////////////////////////////////////////////////
    9.   // Введите адрес (или адреса) электронной почты, куда будет отправляться уведомление
    10.   //  $to = "pupkin@mail.ru, popkin@mail.ru";
    11.   $to = "mail";
    12.   //Введите тему присылаемого письма
    13.   $subj = "tema";
    14.   // от кого письмо
    15.   $from = "support";
    16.   // URL сайта (для формирования ссылки на новые файлы)
    17.   $url = "url";
    18.   //введите имя файла, в котором будет хранится список каталогов
    19.   // ВНИМАНИЕ! на некоторых хостингах (РБК) требуется прописать ПОЛНЫЙ путь к файлу от корня
    20.   // например, /www/domen/users/sub-domen/www/htdocs/list
    21.   $listfile = "/home/.../public_html/log.csv";
    22.  
    23.   // записываем в файл новые файлы
    24.   $list_file = "/home/.../public_html/list_files.csv";
    25.  // введите список файлов, изменения которых не нужно отслеживать
    26.   GLOBAL $no_check,$total_size,$files,$folders;
    27.   $no_check = array("list_port", "filepos", "Tree", "history", "ini");
    28.  // корневая директория сайта
    29.   $root_dir = "/home/.../public_html/uploads";
    30.  
    31.  
    32.   ///////////////////////////////////////////////////////////////////////////
    33.   //Все, дальше ничего менять не нужно  /////////////////////////////////////
    34.   ///////////////////////////////////////////////////////////////////////////
    35.  
    36.   $total_size = $files = $folders = 0;
    37.   $dir = opendir ($root_dir);
    38.   scan_dir($root_dir);
    39.  
    40.   function scan_dir($dirname)
    41.    {
    42.       GLOBAL $arr;
    43.                $dir = opendir($dirname);
    44.                 while (($file = readdir($dir)) !== false)
    45.     {
    46.      if($file != "." && $file != "..")
    47.       {
    48.        if(is_file($dirname."/".$file))
    49.         {
    50.           if (!in_array($file, $GLOBALS['no_check']))
    51.           $arr[] = str_replace($root_dir,"../",$dirname)."/".$file." - ".date("m.d.y H:i:s",filemtime($dirname."/".$file))." - ".filesize($dirname."/".$file);
    52.           $GLOBALS['files']++;
    53.           $GLOBALS['total_size']+= filesize($dirname."/".$file);
    54.         }
    55.        if(is_dir($dirname."/".$file))
    56.         {
    57.             $arr[] = $dirname."/".$file;
    58.             $GLOBALS['folders']++;
    59.             scan_dir($dirname."/".$file);
    60.          }
    61.       }
    62.     }
    63.    closedir($dir);
    64.   }
    65.  
    66.  
    67.  $list = fopen($listfile, "r+");
    68.  if ($list AND filesize($listfile)> 0)
    69.   {
    70.      $file = fopen($listfile,"r");
    71.      $bufer = fread($file,filesize($listfile));
    72.        fclose($file);
    73.      $arr1 = unserialize($bufer);
    74.      $arr2 = array_diff ($arr, $arr1);
    75.      $arr3 = array_diff ($arr1, $arr);
    76.     if ((count ($arr2) + count ($arr3)) ==0)
    77.     {
    78.       if ($id ==1) echo " Изменений файлов со времени последнего  сканирования не обнаружено!<br>";
    79.      }
    80.     else
    81.     {
    82.       $mess1 = " ====== Новые файлы и новые параметры файлов: ====== <br>\n";
    83.      if ($id ==1) $mess1.="<br>";
    84.      foreach($arr2 as $val)
    85.       {
    86.        $list_links = $val;
    87.         $val1 = substr ($val, 1);
    88.         if (substr($val1,0,1)==".") $val1=substr($val1,1);
    89.         if (substr($val1,0,1)==".") $val1=substr($val1,1);
    90.         $val1 = str_replace($root_dir, "", $val);
    91.         $val2 = str_replace($root_dir, "", $val);
    92.         $val1 = "<a href=$url$val1 target=_blank>".$val1."</a><br>";
    93.         $mess1 =  $mess1."$val1 \n";
    94.         $links .= $list_links ."\n";
    95.       }
    96.       $mess2 = "<br>\n\n ====== Удаленные файлы и старые параметры файлов: ====== <br>\n";
    97.       foreach($arr3 as $val)
    98.       {
    99.         $mess2 =  $mess2."$val <br>\n";
    100.       }
    101.       $mess = $mess1.$mess2;
    102.       if (((1024*1024) > $total_size) && ($total_size > 1024)) $size = (round($total_size /1024))."K";
    103.       else if ($total_size > (1024*1024)) $size = (round($total_size / 1024 /1024))."M";
    104.       $mess.= "== \nОбщий обьем  файлов: $size ($total_size байт), всего файлов: $files,папок: $folders ==";
    105.       if ($id == 1) echo $mess;
    106.       $subj =convert_cyr_string (stripslashes($subj),w,k);
    107.       $headers = "MIME-Version: 1.0\n";
    108.       $headers .= "From: $from\n";
    109.       $headers .="Content-type: text/html; charset=windows-1251";
    110.       mail ($to, $subj, $mess, $headers);
    111.       $str = serialize($arr);
    112.       $file = fopen($listfile,"w");
    113.       fwrite($file,$str);
    114.       fclose($file);
    115.      
    116.       $file_list_links = fopen($list_file,"w");
    117.       fwrite($file_list_links,$links);
    118.       fclose($file_list_links);
    119.     }
    120.   }
    121.  else
    122.   {
    123.     $str = serialize($arr);
    124.     $file = fopen($listfile,"w");
    125.     fwrite($file,$str);
    126.     fclose($file);
    127.   }
    128. ?>
    Проблема в то что в директории нужно сканировать не все папки а только три
    В файл list_files.csv записываю новые файлы с момента последнего сканирования, организация папок в директории /uploads/
    /log/
    /file/
    /avatar/
    /images/
    /thumb/
    /smile/
    Нужно чтобы сканер сканировал только эти папки
    Код (Text):
    1.  
    2. /file/
    3. /images/
    4. /thumb/
    Пробовал сам, никак не получается. Создавал переменную $root_dir с массивом директорий, foreach пробегался по всем директория указанным в массиве и что то не получалось, потом вобще запутался )))
    Help!!!
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    наверное вот это scan_dir($root_dir); заменить на что-то типа $dirs = ваш список; foreach( $dirs as $d ){ scan_dir( $d ); }
     
  3. viphost

    viphost Активный пользователь

    С нами с:
    23 мар 2009
    Сообщения:
    307
    Симпатии:
    0
    хм, странно, я так и делал, но что то не работало, сейчас повторно сделал и все гуд, может ошибку допустил какую то тогда =)
    спасибо