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

Статус
В этой теме нельзя размещать новые ответы.

sigi

Постоялец
Регистрация
17 Дек 2006
Сообщения
58
Реакции
2
Вообщем ситуация такая... Есть поле в базе mysql например filename
и есть на винте папочка где хранятся файлики... и имя каждого из них записано в базе....
Нужен скриптик который просмотрит все все поля filename и проверит существует ли файлик с таким же именем в папке... выдаст сколько есть не существующих файликов и при нажатии кнопки удалить... удалит из базы все поля с именами файлов которых нет в папке :) Хух надеюсь доступно обяснил :) Помогите пожалуйста :)
 
Это может выглядеть так.
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"], $str, TRUE)) 
	{
			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
Скрипт не проверял, но по идее все должно срастись. Удаление идет сразу, по мере нахождения несоответствий.
 
Вот сюда вставь название таблицы вместо ... и путь к файлам пропиши (в $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>
 
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"], $str, TRUE))  
    { 
            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:
Warning: mysql_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 error: parse error in D:WEB\test2.php on line 7
:(
 
Огромное спасибо.. все работает!!!
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху