За последние 24 часа нас посетили 48835 программистов и 13062 робота. Сейчас ищут 1924 программиста ...

Улучшенный rmdir()

Тема в разделе "PHP для новичков", создана пользователем health_dim, 21 сен 2017.

  1. health_dim

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

    С нами с:
    20 сен 2017
    Сообщения:
    5
    Симпатии:
    0
    Добрый день!

    Гуру программирования помогите не опытному...

    Изучаю PHP, задался целью написать функцию, которая улучшала бы rmdir(), по умолчанию функция удаляет папку только если она пуста. У меня получилось сие творчество:

    Код (Text):
    1. function delContent($delPath){
    2.   if (!rmdir($delPath)){
    3.     $dir = opendir($delPath);
    4.     chdir($delPath);
    5.     while(($f=readdir($dir)) !== false){
    6.       if(($f == ".") || ($f == "..")){
    7.         continue;
    8.       }
    9.       if(is_dir($f)){
    10.         $arr_dir[] = $f;
    11.       }
    12.       if(is_file($f)){
    13.         $arr_file[] = $f;
    14.       }
    15.     }
    16.     for($i=0; $i<count($arr_file); $i++){
    17.       unlink($arr_file[$i]);
    18.     }
    19.     for($i=0; $i<count($arr_dir); $i++){
    20.       delContent($arr_dir[$i]);
    21.     }
    22.   }
    23.   rmdir($delPath);
    24. }
    В итоге удаляются файлы, а папки остаются, в общем почему 23 строчка кода не выполняется?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    opendir Наверное надо бы закрывать - closedir();
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_ALL | E_STRICT );
    4.  
    5. function govnokod( string $directory )
    6. {
    7.    if ( !is_dir ( $directory ) )
    8.      throw new Exception( 'Пшоль нафиг, твоя несуществующая директория: ' . $directory );
    9.    
    10.    $glob = glob ( $directory . '/*' );
    11.    
    12.    foreach ( $glob AS $path )
    13.    {
    14.      if ( is_dir ( $path ) )
    15.      {
    16.        govnokod( $path );
    17.      }
    18.      elseif( is_file ( $path ) )
    19.      {
    20.        unlink ( $path );
    21.      }
    22.      else
    23.      {
    24.        throw new Exception( 'Тупая ошибка, обычно идут кофе мутить, посылают программирование и идут в танчики натягивать' );
    25.      }
    26.    }
    27.    
    28.    rmdir ( $directory );
    29. }
     
    #3 MouseZver, 21 сен 2017
    Последнее редактирование: 21 сен 2017
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    PHP:
    1. <?php
    2. // Директория, в которой будут удалены все дочерние
    3. // директории и файлы, включая её саму
    4. $dir = 'dir_name';
    5.  
    6. $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
    7. $files = new RecursiveIteratorIterator($it,RecursiveIteratorIterator::CHILD_FIRST);
    8. foreach($files as $file) {
    9.   if ($file->isDir()){
    10.     rmdir($file->getRealPath());
    11.   } else {
    12.     unlink($file->getRealPath());
    13.   }
    14. }
    15. rmdir($dir);
     
    Fell-x27 и mahmuzar нравится это.
  5. health_dim

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

    С нами с:
    20 сен 2017
    Сообщения:
    5
    Симпатии:
    0
    ADSoft. Верное замечание! Спасибо!

    MouseZver. Твой govnokod отлично работает. Про glob() не знал, отличная вещь. Благодарю!

    Deonis. В ООП пока не силен, пока трудно разобраться, учту на будущее.

    Может кто выступить учителем. Одно дело скопировать код, посмотреть! Вау! все работает! Автор крут! А другое понять...
    Почему даже в govnokod 28 строка c rmdir() срабатывает, а в моем "творчестве" нет? )))
     
  6. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    @health_dim
    У @MouseZver всегда код, хоть на какой он не посмотрит будет говорить что это говнокод!
     
    MouseZver нравится это.