<MyRusakov.ru />

Финансовая грамотность от А до Я

Финансовая грамотность от А до Я

Данный курс в кратчайшие сроки обучит Вас финансовой грамотности. Эти знания позволят Вам получить, как минимум, серьёзную финансовую стабильность, а, как максимум, финансовую независимость.

В рамках курса даётся большое количество практических заданий, благодаря которым Вы не просто посмотрите курс, а действительно выполните ряд важнейших шагов, о которых в нём говорится.

Помимо самого курса Вас ждёт ещё бесплатный ценный Бонус: «Ранний выход на пенсию». В рамках этого Бонуса Вы узнаете, какой должен быть капитал конкретно в Вашем случае, варианты его получения, а также какие есть стратегии вывода капитала на пенсии и где их можно протестировать.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Удаление каталога с файлами в PHP

Удаление каталога с файлами в PHP

В предыдущей статье мы с Вами разбирали функции для работы с каталогами в PHP, и там я познакомил Вас с функцией rmdir(), которая удаляет каталог. Однако, я сказал, что таким способом получится удалить только пустую директорию, а вот как удалить каталог с файлами, Вы узнаете сейчас.

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

Несмотря на кажущуюся сложность алгоритма, реализация очень простая и прозрачная:

<?php
  function removeDirectory($dir) {
    if ($objs = glob($dir."/*")) {
       foreach($objs as $obj) {
         is_dir($obj) ? removeDirectory($obj) : unlink($obj);
       }
    }
    rmdir($dir);
  }
?>

Постараюсь объяснить понятным языком алгоритм работы данной функции. Первым делом мы получаем список всех файлов внутри заданной директории. Если их там нет, то сразу удаляем её. Если они есть, то начинаем по-очереди перебирать. Если элемент является файлом, то просто удаляем его (unlink($obj)). Если же это каталог, то вызываем вновь нашу функцию, передав этот каталог. Это и есть рекурсия: функция вызывает сама себя. После вызова функцией самой себя всё начинается заново, но уже с другой директорией. У ней также удаляются все файлы, а все её директории отправляются вновь в эту функцию. Когда все директории и файлы удалены, у нас удаляется уже пустой каталог.

Я Вам скажу так, данный алгоритм не столько полезен с точки зрения практики (не так часто приходится удалять каталоги с файлами в PHP), сколько полезен для развития Вашего мышления. Это очень простой алгоритм и решает он весьма и весьма сложную задачу. Поэтому учитесь составлять алгоритмы - это самое главное в любом языке программирования.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (8):

egorch egorch 19.04.2013 15:30:49

Михаил подскажите как удалить в папке несколько файлов png. Я пол дня провел над этой задачей. Прошу подсказать ))) Очень нужно.

Ответить

Admin Admin 19.04.2013 17:20:54

Получаете список файлов из каталога и удаляете их в цикле через unlink().

Ответить

alexku80 alexku80 13.06.2014 17:08:52

<?php $path = "temp_path"; $mask = "file_mask" $flist = glob($path.$mask); foreach($flist as $fname) unlink($fname); ?> <br> http://blog.aaa-nan.info/2009/08/php-script.html

Ответить

Yunior Yunior 31.08.2014 22:45:23

Михаил, читаю ваши уроки с самого начала и не смог обнаружить у вас пояснения двух знаков, и их применение - ? : ; Например тут is_dir($obj) ? removeDirectory($obj) : unlink($obj); И что такое is_dir()?

Ответить

tikkiwiki tikkiwiki 01.09.2014 09:48:56

Подобная запись является аналогом цикла if и оформляется по такой форме: Условие ? Выражение1 : Выражение2 Выражение1 выполнится если Условие истино, Выражение2 если ложно, т.е. else. Например: $x>=$y ? echo("Икс больше либо равен игрику") : echo(Икс меньше игрика); равносильно if($x>=$y) { echo("Икс больше либо равен игрику"); } else { echo("Икс меньше игрика"); }

Ответить

a.n.d.r.e.y a.n.d.r.e.y 17.07.2015 15:25:19

А как быть если в директории лежит .htaccess?

Ответить

Binggo Binggo 09.01.2016 23:21:55

Можно попробовать так: $dir = 'uploads/'; $files = scandir($dir,1); foreach ($files as $item) { if($item == '.htaccess' OR $item == '.' OR $item == '..'){ /*Ничего не делаем*/ }else{ /*Удаляем*/ unlink('uploads/'.$item); echo 'Удалено'; } }

Ответить

Intention Intention 23.09.2016 15:53:42

Сделал так: function delFolder($dir) { $files = scandir( $dir ); foreach( $files as $file ) { if ( in_array( $file, array( "..", "." ) )) continue; else ( is_dir( "$dir/$file" )) ? delFolder( "$dir/$file" ) : unlink( "$dir/$file" ); } rmdir ( $dir ); }

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.