Ребята нужна помощь.

Тема в разделе "PHP", создана пользователем sigi, 8 апр 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sigi

    sigi Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    56
    Симпатии:
    1
    Вообщем ситуация такая... Есть поле в базе mysql например filename
    и есть на винте папочка где хранятся файлики... и имя каждого из них записано в базе....
    Нужен скриптик который просмотрит все все поля filename и проверит существует ли файлик с таким же именем в папке... выдаст сколько есть не существующих файликов и при нажатии кнопки удалить... удалит из базы все поля с именами файлов которых нет в папке :) Хух надеюсь доступно обяснил :) Помогите пожалуйста :)
     
  2. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    Это может выглядеть так.
    PHP:
    <?php 
     
    // Открываем текущую директорию 
     
    $dirname "D:\твоя директория\\";
    $dir opendir($dirname); 
      
    $filename "print.txt";  //Файлы в дирректории
      
    $filename_r"r_print.txt";     // записи, к которым нет файлов
    //Собираем в массив все файлы
    $str[] ="";
        while ((
    $file readdir($dir)) !== false

    // Если файл обрабатываем 
    if($file != "." && $file != ".."
          { 
            
    // Если имеем дело с файлом 
            
    if(is_file($dirname."/".$file)) 
            { 
            
    //Добавляем в массив
            
    if (is_writable($filename)) 
        {
        if (!
    $handle fopen($filename'a')) 
        {
             echo 
    "Не могу открыть файл ($filename)";
             exit;
        }
        
    // Записываем $somecontent в наш открытый файл.
        
    if (fwrite($handle$file."\n") === FALSE
        {
            echo 
    "Не могу произвести запись в файл ($filename)";
            exit;
        }
        
    fclose($handle);
        }
              
    $str[] .= $file;
                     
    //пишем в файлы, которые есть в дирректории
            
    }  


        
    //print_r($str);
        
    $query "SELECT id_table, name_fail FROM table WHERE  id_table<>0";
        
    $new mysql_query($query);
      if(!
    $new) exit(mysql_error());
         while(
    $par mysql_fetch_assoc($ctg))
        {
        if (!
    in_array($par["name_fail"], $strTRUE)) 
        {
                if (
    is_writable($filename_r)) 
        {
        if (!
    $handle fopen($filename_r'a')) 
        {
             echo 
    "Не могу открыть файл ($filename_r)";
             exit;
        }
    //Пишем информаци, чего нет в дирректории
        
    if (fwrite($handle$par["name_fail"]."\n") === FALSE
        {
            echo 
    "Не могу произвести запись в файл ($filename_r)";
            exit;
        }
        
    fclose($handle);
        }
    $query1 "DELETE FROM table WHERE id_table=".$par['id_table'];
      
    $new mysql_query($query1);
      if(
    $new)
        {  
        echo 
    "Запись о файле ".$par[name_fail]." удалена из таблицы ";
        }
        }
        }    
        
    ?>
    Создаешь файлы $filename и $filename_r
    Скрипт не проверял, но по идее все должно срастись. Удаление идет сразу, по мере нахождения несоответствий.
     
  3. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Вот сюда вставь название таблицы вместо ... и путь к файлам пропиши (в $dir). Ну и вообще разобраться там не сложно, 10 строчек.

    PHP:
    $dir '/var/www/images'// где хранятся файлы
    $query "SELECT id,filename FROM ....";
    $res mysql_query($query);
    while(
    $arr mysql_fetch_array($res)) {
      if (!
    is_file("$dir/$arr[filename]") {
         if(
    $_REQUEST[confirm]) {
            
    $query "DELETE FROM ... WHERE id='$arr[id]'";
            
    mysql_query($query);
         } else echo 
    "У записи $arr[id] файл $arr[filename] не найден<br>";
      }
    }
    ?>
    <form method=post><input name=confirm type=submit value="Confirm?"></form>
     
  4. sigi

    sigi Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    56
    Симпатии:
    1
    PHP:
    <?php
    include("./inc/config.php");  
     
    // Открываем текущую директорию  
     
    $dirname "D:/WEB/uploads/"
    $dir opendir($dirname);  
      
    $fil "print.txt";  //Файлы в дирректории 
      
    $filename_r"r_print.txt";     // записи, к которым нет файлов 
    //Собираем в массив все файлы 
    $str[] =""
        while ((
    $file readdir($dir)) !== false)  
    {  
    // Если файл обрабатываем  
    if($file != "." && $file != "..")  
          {  
            
    // Если имеем дело с файлом  
            
    if(is_file($dirname."/".$file))  
            {  
            
    //Добавляем в массив 
            
    if (is_writable($fil))  
        { 
        if (!
    $handle fopen($fil'a'))  
        { 
             echo 
    "Не могу открыть файл ($fil)"
             exit; 
        } 
        
    // Записываем $somecontent в наш открытый файл. 
        
    if (fwrite($handle$file."\n") === FALSE)  
        { 
            echo 
    "Не могу произвести запись в файл ($fil)"
            exit; 
        } 
        
    fclose($handle); 
        } 
              
    $str[] .= $file
                     
    //пишем в файлы, которые есть в дирректории 
            
    }   
    }  
    }  
        
    //print_r($str); 
        
    $query "SELECT mid, filename FROM service WHERE  mid <> 0"
        
    $new mysql_query($query); 
      if(!
    $new) exit(mysql_error()); 
         while(
    $par mysql_fetch_assoc($ctg)) 
        { 
        if (!
    in_array($par["filename"], $strTRUE))  
        { 
                if (
    is_writable($filename_r))  
        { 
        if (!
    $handle fopen($filename_r'a'))  
        { 
             echo 
    "Не могу открыть файл ($filename_r)"
             exit; 
        } 
    //Пишем информаци, чего нет в дирректории 
        
    if (fwrite($handle$par["filename"]."\n") === FALSE)  
        { 
            echo 
    "Не могу произвести запись в файл ($filename_r)"
            exit; 
        } 
        
    fclose($handle); 
        } 
    $query1 "DELETE FROM service WHERE mid=".$par['mid']; 
      
    $new mysql_query($query1); 
      if(
    $new
        {   
        echo 
    "Запись о файле ".$par[filename]." удалена из таблицы "
        } 
        } 
        }     
        
    ?>
    пишет
    PHP:
    Warningmysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in D:\SWEB\ualife\fun\test\index.php on line 43

    второй скрипт
    PHP:
    <?php
    include("./inc/config.php");  
    $dir 'D:/WEB/uploads/'// где хранятся файлы 
    $query "SELECT mid,filename FROM service"
    $res mysql_query($query); 
    while(
    $arr mysql_fetch_array($res)) { 
      if (!
    is_file("$dir/$arr[filename]") { 
         if(
    $_REQUEST[confirm]) { 
            
    $query "DELETE FROM service WHERE mid='$arr[id]'"
            
    mysql_query($query); 
         } else echo 
    "У записи $arr[id] файл $arr[filename] не найден<br>"
      } 

    ?> 
    <form method=post><input name=confirm type=submit value="Confirm?"></form>      ?>
    Пишет ошибку
    PHP:
    Parse errorparse error in D:WEB\test2.php on line 7
    :(
     
  5. Gisma

    Gisma Создатель

    Регистр.:
    9 май 2007
    Сообщения:
    45
    Симпатии:
    9
    скобку забыл
    замени на

     
    sigi нравится это.
  6. sigi

    sigi Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    56
    Симпатии:
    1
    Огромное спасибо.. все работает!!!
     
Статус темы:
Закрыта.