Forum Webscript.Ru

Программирование => PHP => Тема начата: DV от 22 Января 2004, 17:58:24

Название: удаление файлов в дире циклом
Отправлено: DV от 22 Января 2004, 17:58:24
есть дира img/
а в ней папки m01 m02 ... m12 (месяц)
такая вот сортировка - может потом я отнее и откажусь но пока не напрягает.

значит через форму-запрос, выводим все картинки за определенный месяц, с возможностью удаления каждой в отдельности.
Выглядит само удаление так:

$table = "img_news_";
$imgdir = "../../img/news/m$mon";
?>
$query ="DELETE FROM $table WHERE id=\'$id\'";
mysql_query($query)
or die();
?>
$del = unlink("$imgdir/$name");
if ($del)
{
print ("
пипец файлу");
}
?>

поясню:
в форму выводится результат запроса из базы - id, и name.
дира известна и так, только немного дописываем номер к папке переменной $mon
$mon - берется из формы 01 02 ... 12

что происходит далье и так видно - удаляем строку из базы и потом сам файл.

Вот желание появилось удалить на основе этих данных сразу все файлы!
как лучше сделать - подскажите.
пробовал вариант: \'удаление всех файлов\' в дире (здесь обсуждалось), но он у меня что-то не пошел (руки кривые). В папке было три файла. Трижды вылезла ошибка что \'файл не найден\', с зовершением ошибки: \'невозможно удалить диру - так как там файлы\' :)
Название: удаление файлов в дире циклом
Отправлено: Меняздесьдавнонет от 22 Января 2004, 18:17:06
Цитировать
DV:
вылезла ошибка что \'файл не найден\',

ну так возьми и выведи на экран то, что ты подставляешь в код.
И поправь свой код, чтобы там было нормальное имя файла, существующее
Название: удаление файлов в дире циклом
Отправлено: DV от 22 Января 2004, 18:24:39
так ведь фишка в том скрипте как раз в том, что бы не знать имен файлов, а удалить все существующие файлы в дире!
нет имен в приципе - есть просто тело - \'файл\'

а если нет имен.. то что выводить то???
возможно я и гоню... дело было вечером, после раздумок и было написано то что было.
Название: удаление файлов в дире циклом
Отправлено: Меняздесьдавнонет от 22 Января 2004, 18:33:04
для того, чтобы файл удалить, его имя надо знать.
фишка того скрипта в том, что он сначала узнает имена файлов, а потом их удаляет.

Цитировать
DV:
нет имен в приципе - есть просто тело - \'файл\'

а вот про это - поподробнее.
весьма занимательное утверждение.
Название: удаление файлов в дире циклом
Отправлено: DV от 22 Января 2004, 18:37:49
Ромик... ты прав елки палки :)
Название: удаление файлов в дире циклом
Отправлено: DV от 22 Января 2004, 20:50:32
в общем я разобрался в том скрипте - что файлы считывает и удаляет.
Называется найди 2 отличия :)
у меня не получалось - потому что поставил лишние скобки....
привожу пример как у меня все работает (если вдруг кто-то тоже криворукий как и я :) )

if ($pic =="del")
{
$dir = "../img/news/m$mon/";

   if ($handle = opendir("$dir"));
   {
        while (false !== ($file = readdir($handle)))
          {
            if ($file != "." && $file != "..")
         {
              {
                $del_file=$dir.$file;
                unlink($del_file);
              }
      }
          }
        closedir($handle);
      rmdir($dir);
    }
print "
каталог $dir>/b< удален
";
}
?>

диру задали
месяц $mon - берется из формы
м... да вобщем все :)

тему можно закрыть - но вообще-то про циклы интересно узнать поподробнее - в теории я понял а вот на практике мой пример (сабж) можно разобрать ?
Название: удаление файлов в дире циклом
Отправлено: Меняздесьдавнонет от 22 Января 2004, 21:02:05
что в нем разбирать?
он собран целиком из кусков из мана
Название: удаление файлов в дире циклом
Отправлено: DV от 23 Января 2004, 09:50:11
ну видимо я не так скопировал :)
потому что когда с маном стал сравнивать нашел лишние скобки.
Название: удаление файлов в дире циклом
Отправлено: Меняздесьдавнонет от 23 Января 2004, 09:59:33
лишние скобки у тебя потому, что ты их по-дурацки ставишь.
и единственный способ найти лишнюю - это, действительно - посчитать.

if ($pic =="del") {
  $dir = "../img/news/m$mon/";
  if ($handle = opendir("$dir")) {
    while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
        $del_file=$dir.$file;
        unlink($del_file);
      }
    }
  }
  closedir($handle);
  rmdir($dir);
  print "
каталог $dir>/b< удален
";
}

Вот - смотри. тут все сразу ясно.
Для кого отступы придумали?

кроме скобок, я тут в одном месте еще точку с запятой убрал.
Смотри.

и дело тут не в циклах, а в элементарной логике - что за чем идет и в каком случае исполняется.
Название: удаление файлов в дире циклом
Отправлено: DV от 23 Января 2004, 10:06:36
это у меня тут они так глупо ставятся.. я не знаю откуда ты копируешь так все в цвете ,)
но все равно спасибо.
Название: удаление файлов в дире циклом
Отправлено: DV от 23 Января 2004, 10:11:29
блин... я тормаз.. здесь же в форме все есть....
уууууууууууу............... :)
Название: удаление файлов в дире циклом
Отправлено: Меняздесьдавнонет от 23 Января 2004, 10:47:36
дело-то не в цвете.
а в принципе расстановки скобок.