Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: не удаляются папки
 
 автор: elenaki   (25.07.2007 в 21:18)   письмо автору
 
 


function full_del_dir ($directory)
  {
  $dir = opendir($directory);
  while(($file = readdir($dir)))
  {
    if ( is_file ($directory."/".$file))
    {
      unlink ($directory."/".$file);
    }
    else if ( is_dir ($directory."/".$file) &&
             ($file != ".") && ($file != ".."))
    {
      full_del_dir ($directory."/".$file);  
    }
  }
  closedir ($dir);
  rmdir ($directory);
  
  }


функцию удаления непустых директорий взяла отсюда:
http://www.softtime.ru/bookphp/gl6_8.php
там, кстати, ошибка - в последнем операторе нет точки с запятой в конце

не работает. не удаляет ни саму папку, ни ее содержимое. :(
по одному удалять файлы скриптом получается, значит, дело не в CHMOD'ax.
надо при удалении все галереи удалить сначала все фотки из ее папки, а потом саму папку

   
 
 автор: Trianon   (25.07.2007 в 21:32)   письмо автору
 
   для: elenaki   (25.07.2007 в 21:18)
 


<?

  
function full_del_dir ($directory)
  {
   if(!
is_dir($directory))
      return 
false;
   
$dir opendir($directory);
   if(!
$dir) return false;
   while((
$file readdir($dir)))
    if ( 
is_file ($directory."/".$file))
      echo 
"<br/>\r\n Deleted $directory/$file : "
        
.(unlink ($directory."/".$file)?"Ok":"failed") ;
    elseif ( 
is_dir ($directory."/".$file) &&
             (
$file != ".") && ($file != ".."))
      
full_del_dir ($directory."/".$file);
   
closedir ($dir);
   echo 
"<br/>\r\n Removed $directory/ : "
        
.(($s rmdir($directory))?"Ok":"failed") ;
   return 
$s;
  }

  echo 
full_del_dir("c:/zoo/inv1/baddir");

?>


Removed c:/zoo/inv1/baddir/1/news/ : Ok
Removed c:/zoo/inv1/baddir/1/ : Ok
Deleted c:/zoo/inv1/baddir/admin/addnews.php : Ok
Deleted c:/zoo/inv1/baddir/admin/addnewsform.php : Ok
Deleted c:/zoo/inv1/baddir/admin/delnews.php : Ok
Deleted c:/zoo/inv1/baddir/admin/editnews.php : Ok
Deleted c:/zoo/inv1/baddir/admin/editnewsform.php : Ok
Deleted c:/zoo/inv1/baddir/admin/hide.php : Ok
Deleted c:/zoo/inv1/baddir/admin/index.php : Ok
Deleted c:/zoo/inv1/baddir/admin/show.php : Ok
Removed c:/zoo/inv1/baddir/admin/ : Ok
Deleted c:/zoo/inv1/baddir/config.php : Ok
Removed c:/zoo/inv1/baddir/files/ : Ok
Deleted c:/zoo/inv1/baddir/index.php : Ok
Deleted c:/zoo/inv1/baddir/LICENSE : Ok
Deleted c:/zoo/inv1/baddir/news.css : Ok
Deleted c:/zoo/inv1/baddir/news.php : Ok
Deleted c:/zoo/inv1/baddir/news.sql : Ok
Deleted c:/zoo/inv1/baddir/README : Ok
Deleted c:/zoo/inv1/baddir/util/admin.css : Ok
Deleted c:/zoo/inv1/baddir/util/bottomadmin.php : Ok
Deleted c:/zoo/inv1/baddir/util/nulltop.php : Ok
Deleted c:/zoo/inv1/baddir/util/topadmin.php : Ok
Removed c:/zoo/inv1/baddir/util/ : Ok
Removed c:/zoo/inv1/baddir/ : Ok1

   
 
 автор: EXP   (26.07.2007 в 01:48)   письмо автору
 
   для: Trianon   (25.07.2007 в 21:32)
 

Эта функция не работает если имена файлов например 0010.class 0020.class 0100.class, их правильно видит glob() но кажется не видит имена начинающиеся с точки

   
 
 автор: Trianon   (26.07.2007 в 02:04)   письмо автору
 
   для: EXP   (26.07.2007 в 01:48)
 


Deleted c:/exp/0010.class/0020.class/0030.class : Ok
Deleted c:/exp/0010.class/0020.class/Descript.ion : Ok
Removed c:/exp/0010.class/0020.class/ : Ok
Removed c:/exp/0010.class/ : Ok
Removed c:/exp/ : Ok1

   
 
 автор: elenaki   (26.07.2007 в 09:47)   письмо автору
 
   для: Trianon   (26.07.2007 в 02:04)
 

хотела уточнить, что удалять папки надо на сервере. написала ему физический путь до
папки (она на уровень выше скрипта находится). все равно не удаляется. просто ничего
с ней не происходит и ошибок не выдается. права у папки 0777, создана она тоже скриптом,
имя соответствует id галереи в базе, т.е. 1, 17 и т.д...

   
 
 автор: Unkind   (26.07.2007 в 09:52)   письмо автору
 
   для: elenaki   (26.07.2007 в 09:47)
 

В таком случае либо указан неверный путь до папки (слеш на конце не надо писать), либо всё-таки что-то с правами.


<?php
//...
    
$directory preg_replace("|/$|"""$directory);

    if(!
is_dir($directory))
    {
        print(
'"' $directory '" is not dir');
        return 
false;
    }

    
$dir opendir($directory); 

    if(!
$dir)
    {
        print(
'Could not open "' $directory '"');
        return 
false;
    }
//...
?>

   
 
 автор: Trianon   (26.07.2007 в 10:35)   письмо автору
 
   для: elenaki   (26.07.2007 в 09:47)
 

Хотелось бы увидеть отчет.

   
 
 автор: elenaki   (26.07.2007 в 21:17)   письмо автору
 
   для: Trianon   (26.07.2007 в 10:35)
 

Removed /home/virtual/site500/fst/var/www/html/photos/19/ : failed

папка с фотками - на месте, как приклееная.

   
 
 автор: Trianon   (26.07.2007 в 22:34)   письмо автору
 
   для: elenaki   (26.07.2007 в 21:17)
 

единственная строка?
Без попыток удалить файлы?

странно. Значит файлы не видны...
А как файлы анзываются?

   
 
 автор: EXP   (26.07.2007 в 22:54)   письмо автору
 
   для: elenaki   (26.07.2007 в 21:17)
 

Попробуйте вместо проверки if (!is_dir(... Сделать if (file_type($dir) != 'dir') .


// заметил что у меня нет не file_type ни file_size :) зато ts-dir похоже работает выше
/home/.... не работает
<?php 
$DIR 
'D:/WebServers/home/localhost/www//SMALL';
// пробовал "../dir/SMALL" , бесполезно , как-будто ищет на Z:/

function 
DelFiles($DIR)
{
$dk glob($DIR '/*');
for(
$i 0$i count($dk); $i++) 

$file $dk[($i)] ;
if ( !
is_dir($file)) {
 if (!
unlink($file)) echo $file '--<br>';
 else echo 
'.';
} else { 
DelFiles($file);
}
}
if (
rmdir($DIR)) echo $DIR ' deleted<br>';
}

DelFiles($DIR)
?>



read&while тоже работает с ......./0010, ...../010 оказалось

   
 
 автор: Trianon   (27.07.2007 в 03:04)   письмо автору
 
   для: elenaki   (26.07.2007 в 21:17)
 

У Вас случайно ошибки на хостинге не заблокированы?

   
 
 автор: Trianon   (27.07.2007 в 10:06)   письмо автору
 
   для: Trianon   (27.07.2007 в 03:04)
 

Я переписал скрипт, увеличив его агрессивность.
Теперь если даже прав на просмотр характеристик ему не отдают, он пытается сожрать и смести всё, до чего может дотянуться.
<?

  
function full_del_dir ($directory)
  {
      
$r "";
      if(
$dir opendir($directory))
      {
          while((
$file readdir($dir)))
          {
            if ( 
$file == "." || $file == "..")
                continue;
            echo 
"<br/>\r\nFound $directory/$file ";
            
$if is_file($directory."/".$file) ? 'f' '0';
            
$id is_dir($directory."/".$file) ? 'd' '0';
            echo 
"[$id$if] ";
            if(!
$id) echo unlink ($directory."/".$file)?"ul:Ok":"ul:Er" ;
            if(!
$if) echo full_del_dir ($directory."/".$file);
          }
          
closedir ($dir);
      }
      else
           
$r .=  "fullrmdir $directory : Cannot open as dir";
      
$r .= "<br/>\r\n Rmdir $directory : "
        
.(rmdir($directory)?"Ok":"failed") ;
      return 
$r;
  }


  echo 
full_del_dir("c:/zoo/inv1/baddir");

?>

   
 
 автор: elenaki   (27.07.2007 в 10:56)   письмо автору
 
   для: Trianon   (27.07.2007 в 10:06)
 

Found ../photos/20/04030203.jpg [00] ul:Erfullrmdir ../photos/20/04030203.jpg : Cannot open as dir
Rmdir ../photos/20/04030203.jpg : failed
Found ../photos/20/Picture 002.jpg [00] ul:Erfullrmdir ../photos/20/Picture 002.jpg : Cannot open as dir
Rmdir ../photos/20/Picture 002.jpg : failed
Found ../photos/20/Picture 001.jpg [00] ul:Erfullrmdir ../photos/20/Picture 001.jpg : Cannot open as dir
Rmdir ../photos/20/Picture 001.jpg : failed
Rmdir ../photos/20 : failed

   
 
 автор: Trianon   (27.07.2007 в 11:30)   письмо автору
 
   для: elenaki   (27.07.2007 в 10:56)
 

Found ../photos/20/04030203.jpg 
означает, что был обнаружен элемент каталога с таким именем ../photos/20/04030203.jpg

[00] 
означает, что про этот элемент не было сказано, ни что это файл, ни что это каталог

Фактически, файловая система отказалась сообщать эккаунту php-процесса любую информацию об этом файле - видимо по причине отсутствия должных привилегий.

 ul:Er
означает, что операция unlink(../photos/20/04030203.jpg) завершилась неудачно.
Видимо по той же причине.


fullrmdir ../photos/20/04030203.jpg : Cannot open as dir
означает, что попытка просканировать этот элемент в предположении, что это каталог, завершилась неудачно. Это как раз неудивительно - это же не каталог.

Rmdir ../photos/20/04030203.jpg : failed
означает, что попытка удалить этот элемент в предположении, что это каталог, завершилась неудачно. Это тоже неудивительно.

и так несколько раз по числу фоток.

Rmdir ../photos/20 : failed
попытка удалить объемлющий каталог не выполнена потому, что не удалось удалить элементы из него.


А чтобы вывод был чуть нагляднее, строку
$r .= "fullrmdir $directory : Cannot open as dir";
нужно изменить так:
  $r .=  "<br/>\r\n opendir $directory : Cannot open as dir";

   
 
 автор: @ndry   (27.07.2007 в 11:59)   письмо автору
 
   для: Trianon   (27.07.2007 в 11:30)
 

Текущую папку узнавайте dirname (__FILE__)

ЗЫ. А вы не позабывали права на доступ к файлам и папкам постаить на 777?

   
 
 автор: Trianon   (27.07.2007 в 12:08)   письмо автору
 
   для: @ndry   (27.07.2007 в 11:59)
 

да я вообще тут не при делах ))

   
 
 автор: elenaki   (27.07.2007 в 12:12)   письмо автору
 
   для: @ndry   (27.07.2007 в 11:59)
 

права на все папки 777 (я же вешала скриншот). папки создаются скриптом. т.е., при
создании галереи (вернее, при попытке добавить в нее фотки), создается папка с именем
как id этой галереи, ей устанавливаются права 777 и заносятся фотки. если удалять
отдельные фотки, они нормально удаляются. а хотелось бы при удалении галереи целиком
удалять всю ее папку вместе с фотками (поочереди, конечно, сначала файлы, потом папку).
значит, не судьба :(

   
 
 автор: Trianon   (27.07.2007 в 12:17)   письмо автору
 
   для: elenaki   (27.07.2007 в 12:12)
 

покажите пожалуйста скрипт (и его отчет), в котором будет видно, что они удаляются по-отдельности.
Скриптом!


То, что их можно удалить через ftp, ни у кого сомнений не вызывает.

   
 
 автор: elenaki   (27.07.2007 в 12:57)   письмо автору
 
   для: Trianon   (27.07.2007 в 12:17)
 

ааааа! они что-то поменяли на сервере! не удаляются и файлы по одиночке. точно удалялись,
как бы я дошла до 21-го номера галереи? я их создавала, удаляла, снова создавала... гады!
в последний день работы до отпуска... поубиваю... вечно эти хостеры палки в колеса вставляют ...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования