rmdir — Удаляет директорию


Содержание

Удаление директории в PHP

Доброго времени суток, дорогие читатели. Сегодня хотелось бы поговорить на тему удаления директории в PHP. Казалось бы, что операция не является сложной, однако некоторые нюансы имеют место быть. Давайте рассмотрим способы, как можно это сделать.

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

В сети советуют написать функцию, которой в качестве аргумента будет передаваться путь к директории, которую нам необходимо удалить. В теле функции необходимо организовать листинг содержимого директории, в рамках которого осуществляется проверка — является ли файл директорией. Если файл является директорией, то по данному условию функция вызывает себя. Это необходимо для зачистки вложенных директорий, и это будет работать на всех уровнях вложенности. В ином случае, для файла применяется функция unlink() — она предназначена для удаления файла. За рамками данной проверки на последнем шаге мы удаляем директорию.

Пример реализации:

Какие проблемы у данного кода?

В простых случаях директория со всеми вложениями удалится. Но предположим, что в нашей директории присутствует скрытый файл, который начинается с точки, например, .htaccess. Функция glob() представляет из себя glob-подстановку UNIX, в которой по умолчанию не участвуют скрытые файлы (DOTFILES). Например, если мы зайдем в nix-терминал и будем использовать bash, то мы столкнемся с той же проблемой (речь именно о скрытых файлах в рамках glob). Для решения вопроса в bash существует команда shopt -s dotglob — она разрешает glob-подстановку скрытых файлов. В PHP же это можно решить добавлением дополнительно параметра GLOB_BRACE для glob() и расширением паттерна из первого параметра функции.

И тут так же есть проблема — мы столкнемся с бесконечным циклом, так как в массив войдут значения . и .. — что является на системном уровне текущей и родительской директорией. Придем мы к бесконечному циклу (а не к удалению всех родительских директорий), потому что . в рамках сортировки по умолчанию в сформированном массиве будет первее .. — то есть каждый раз мы будет обращаться к одной и той же директории. Для решения проблемы сформируем массив из данных системных директорий и в цикле удалим их индексы из основного массива. Также существует проблема символьных ссылок. Допустим, что в удаляемой директории размещена ссылка на другую директорию, в удалении содержимого которой мы абсолютно не заинтересованы. Для решения проблемы, перед созданием рекурсии, необходимо организовать проверку на то, что сущность не является ссылкой.

В итоге, функция обретает следующий вид:

Код рабочий, но на самом деле можно было сделать и проще. В PHP существует класс FilesystemIterator, который уже по умолчанию имеет необходимые нам настройки. В конструктор передается путь до директории, листинг которой нам нужен. Нам достаточно просто создать объект.

В заключение хотелось бы отметить еще один быстрый способ. Корректность его использования весьма сомнительна — отправить команду на выполнение в SHELL.

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

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Как удалить папку через командную строку

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

Для достижения цели, откройте cmd c привилегиями администратора. Введите RD /? и бегло ознакомьтесь с особенностями и параметрами команды. Здесь Вы увидите всего лишь 2 параметра:

  1. /s — при использовании этого префикса, удалится папка, а также все вложенные в нее элементы. Если Ваш каталог не пустой, и Вы не прописали это параметр, тогда у Вас ничего не выйдет.
  2. /Q — используется при удалении без подтверждения.

В общем виде конструкция выглядит таким образом:

RD или RMDIR /s/q “полный путь папки”

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

Удаление папки с подтверждением и без

У себя на компьютере я создал каталог с названием «cmd» и скопировал в него несколько объектов. Далее ввел в командную строку такую команду:

Затем нажал Enter и клавишу Y, так как cmd сделала запрос на подтверждение удаления.

Проверив диск C, я не обнаружил каталога. Далее создал папку с именем «удалить» и также скопировал 5 файлов, но при вводе команды, убрал префикс /s. Получилось так:

После нажатия Enter, удаления не произошло, а в командной строке высветилось сообщение, что папка не пуста. Вывод, без параметра /s Вы сможете удалить только пустую папку, следовательно, использование без данного префикса практически бесполезно.

Если Вам лень вводить букву подтверждения (Y или N), тогда следующая конструкция для Вас. Выше упоминался префикс /q, именно он убирает надоедливый ввод букв (для доказательства смотрите скрин).

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

Как удалить файлы и каталоги в терминале Linux?

Команды rm и rmdir удаляют файлы и каталоги в Linux, macOS и других Unix-подобных операционных системах. Они похожи на команды del и deltree в Windows и DOS. Эти команды очень мощные и имеют довольно много опций.

Важно отметить, что файлы и каталоги, удаленные с помощью rm и rmdir , не перемещаются в корзину. Они сразу же удаляются с вашего компьютера. Если вы случайно удалили файлы с помощью этих команд, вы сможете восстановить их только из резервной копии.

Как удалить файлы с помощью rm

Самый простой случай — это удаление одного файла в текущем каталоге. Введите команду rm, пробел, а затем имя файла, который вы хотите удалить.

Илон Маск рекомендует:  Результаты мини-конкурса по вёрстке

Если файл не находится в текущем рабочем каталоге, укажите путь к местоположению файла.

Вы можете передать более одного имени файла в rm. При этом удаляются все указанные файлы.

Подстановочные знаки могут использоваться для выбора групп файлов, которые будут удалены. Знак * представляет несколько символов, а символ ? представляет один символ. Эта команда удалит все файлы изображений png в текущем рабочем каталоге.


Эта команда удалит все файлы с одним символьным расширением. Например, это удалит File.1 и File.2, но не File.12.

Если файл защищен от записи, вам будет предложено удалить файл. Вы должны ответить с помощью y или n и нажать «Enter».

Чтобы снизить риск использования rm с подстановочными знаками, используйте параметр -i (интерактивный). Для этого необходимо подтвердить удаление каждого файла.

Опция -f (сила) противоположна интерактивной. Он не запрашивает подтверждение, даже если файлы защищены от записи.

Как удалить каталоги с помощью rm

Чтобы удалить пустой каталог, используйте опцию -d (directory). Вы можете использовать подстановочные знаки (* и ?) В именах каталогов так же, как и в именах файлов.

Предоставление более одного имени каталога удаляет все указанные пустые каталоги.

Чтобы удалить не пустые каталоги, используйте параметр -r (рекурсивный). Чтобы было ясно, это удаляет каталоги и все файлы и подкаталоги, содержащиеся в них.

Если каталог или файл защищен от записи, вам будет предложено подтвердить удаление. Чтобы удалить не пустые каталоги и подавить эти приглашения, используйте вместе параметры -r (рекурсивный) и -f (принудительный).

Здесь требуется осторожность. Ошибка в команде rm -rf может привести к потере данных или неисправности системы. Это опасно, и осторожность — лучшая политика. Чтобы получить представление о структуре каталогов и файлах, которые будут удалены командой rm -rf, используйте команду tree .

Используйте apt-get для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux используйте инструмент управления пакетами вашего дистрибутива Linux.

Выполнение команды tree дает простую для понимания диаграмму структуры каталогов и файлов под каталогом, из которого она запускается.

Вы также можете указать путь к команде tree чтобы он запускал дерево из другого каталога в файловой системе.

Команда rm также имеет параметры —one-file-system , —no-preserve-root , —preserve-root , но они рекомендуются только для опытных пользователей. Если вы что-то не так, вы можете случайно удалить все ваши системные файлы.

Как удалить каталоги с помощью rmdir

Есть еще одна команда rmdir , которую вы можете использовать для удаления каталогов. Разница между rm и rmdir том, что rmdir может удалять только пустые каталоги. Он никогда не удалит файлы.

Самый простой случай — удаление одного пустого каталога. Как и в случае с rm , вы можете передать несколько имен каталогов в rmdir или rmdir путь к каталогу.

Удалите один каталог в текущем каталоге, передав его имя в rmdir :

Удалите несколько каталогов, передав список имен в rmdir :

Удалите каталог не в текущем каталоге, указав полный путь к этому каталогу:

Если вы попытаетесь удалить не пустую папку, rmdir выдаст вам сообщение об ошибке. В следующем примере rmdir успешно и без вывода сообщений удаляет каталог clients но отказывается удалять каталог projects поскольку он содержит файлы. Каталог projects остается точно таким, каким он был, а файлы в нем нетронутыми.

Когда rmdir выдает ошибку «Directory not empty», он прекращает обработку каталогов, переданных ему в командной строке. Если вы попросили удалить четыре каталога, а в первом содержались файлы, rmdir выдаст вам сообщение об ошибке и больше ничего не сделает. Вы можете заставить его игнорировать эти ошибки с —ignore-fail-on-non-empty чтобы обрабатывать другие каталоги.

В следующем примере две папки были переданы в rmdir , это work/reports и work/quotes. Параметр —ignore-fail-on-non-empty включен в команду. В папке work/reports находятся файлы, поэтому rmdir не может удалить ее. Опция —ignore-fail-on-non-empty заставляет rmdir игнорировать ошибку и переходить к следующей папке, которую он должен обработать, это work/quotes. Это пустая папка, и rmdir удаляет ее.

Эта команда использовалась.

Вы можете использовать опцию -p (parent), чтобы удалить каталог, а также удалить его родительские каталоги. Этот прием работает, потому что rmdir начинается с целевого каталога, а затем возвращается к родительскому. Теперь этот каталог должен быть пустым, поэтому он может быть удален rmdir, и процесс повторяет шаг назад по пути, предоставленному rmdir.

В следующем примере команда, переданная в rmdir:

Каталоги invoices и work удаляются по запросу.

Используете ли вы Bash или любую другую оболочку? Linux предоставляет гибкие и мощные команды для удаления каталогов и файлов прямо из командной строки терминала. Некоторые люди предпочитают иметь рабочий процесс, который вращается вокруг терминала. У других может не быть выбора в этом вопросе. Они могут работать на серверах без установленного графического интерфейса или в удаленном сеансе в автономной системе, такой как Raspberry Pi. Эти команды идеально подходят для этой группы людей.

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

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

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

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

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

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

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


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

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

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

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

Илон Маск рекомендует:  Подпись под картинкой

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

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

Она выглядит вот так:

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

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

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

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

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

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

    Как удалить файл или папку через командную строку Windows

    Командная строка – мощный инструмент для автоматизации и упрощения многих задач, которые возникают при администрировании компьютера с операционной системой Windows. В этой статье мы рассмотрим команды DEL, ERASE, RD и RMDIR. С их помощью вы сможете удалять файлы и папки прямо из командной строки.

    Удаление файлов через командную строку

    Если вам нужно удалить файл через командную строку, то для этого нужно использовать команду DEL или ERASE . Эти команды являются синонимами и работают одинаково. Вы можете получить подробную информацию об этих командах, если введете их в командную строку с параметром « /? ». Например, вы можете ввести « del /? » и в консоль выведется вся основная информация о команде del .

    Команда DEL (или ERASE ) предназначена для удаления одного или нескольких файлов и может принимать следующие параметры:

    • /P – удаление с запросом подтверждения для каждого файла;
    • /F – удаление файлов с атрибутом «только для чтения»;
    • /S – удаление указанного файла из всех вложенных папок;
    • /Q – удаление без запроса на подтверждение ;
    • S — Системные;
    • H — Скрытые;
    • R – Только для чтения;
    • A — Для архивирования
    • Также перед атрибутами можно использовать знак минус «-», который имеет значение «НЕ». Например, «-S» означает не системный файл.

    Обычно, для того чтобы воспользоваться командной DEL нужно сначала перейти в папку, в которой находится файл для удаления, и после этого выполнить команду. Для того чтобы сменить диск нужно просто ввести букву диска и двоеточие. А для перемещения по папкам нужно использовать команду « CD ».

    После того как вы попали в нужную папку можно приступать к удалению файлов. Для этого просто введите команду DEL и название файла.


    Также, при необходимости вы можете удалять файлы, не перемещаясь по папкам. В этом случае нужно указывать полный путь к документу.

    Если есть необходимость выполнить запрос на подтверждение удаления каждого их файлов, то к команде DEL нужно добавить параметр « /p ». В этом случае в командной строке будет появляться запрос на удаление файла и пользователю нужно будет ввести букву «Y» для подтверждения.

    Нужно отметить, что при использовании параметра «/a», отвечающие за атрибуты буквы нужно вводить через двоеточие. Например, для того чтобы удалить все файлы с атрибутом «только для чтения» и с расширением «txt» нужно ввести команду « del /F /A:R *.txt ».

    Аналогичным образом к команде DEL можно добавлять и другие параметры. Комбинируя их вы сможете создавать очень мощные команды для удаления файлов через командную строку Windows. Ниже мы приводим еще несколько примеров:

    • del D:\ — уничтожение всех файлов в корне диска D;
    • del D:\*.txt – уничтожение всех файлов с расширением txt в корне диска D;
    • del D:\doc – уничтожение всех файлов в папке d:\doc (документы с атрибутами будут пропущены);
    • del /A:r d:\doc\*.txt – уничтожение всех файлов с атрибутом «только для чтения» и расширением «txt» в папке d:\doc;

    Удаление папок через командную строку

    Если вам нужно удалить папку через командную строку Windows, то указанные выше команды вам не помогут. Для удаления папок существует отдельная команда RD или RMDIR (сокращение от английского Remove Directory).

    Команды RD и RMDIR являются синонимами и предназначены для удаления папок. Они могу принимать следующие параметры:

    • /S — удаление всего дерева каталогов, при использовании данного параметра будет удалена не только сама папка, но и все ее содержимое;
    • /Q – удаление дерева папок без запроса на подтверждение;

    Например, для того чтобы удалить папку достаточно ввести команду RD и название папки.

    Если папка содержит вложенные папки или файлы, то при ее удалении будет выведена ошибка».

    Для решения этой проблемы к команде RD нужно добавить параметр « /s ». В этом случае удаление проходит без проблем, но появляется запрос на подтверждение удаления.

    Для того чтобы удаление дерева папок прошло без появления запроса на подтверждение к команде нужно добавить параметр « /q ». В этом случае папка удаляется без лишних вопросов.

    Также команда RD может принимать сразу несколько папок, для этого их нужно просто разделить пробелом. Например, если выполнить « rd 111 222 », то за один раз можно удалить папки с названиями « 111 » и « 222 ».

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

    Комбинируя команды DEL и RD , можно создавать мощные скрипты для очистки и удаления папок в операционной системе Windows.

    Как удалить директорию и все файлы и директории в ней?

    Нужно удалить директорию и все вложенные в неё файлы и папки.

    Попробовал такую функцию:

    Не работает! Подскажите в чём дело?

    Может есть другие соображения по данному вопросу?

    6 ответов 6

    Классическая функция рекурсивного удаления, пользуйтесь:

    Этот вариант работает? Проверьте права на папки и файлы, если не работает.

    Поробовал не рекурсивно:

    вот создайте файлик delpaster.php с таким кодом:

    Всё ещё ищете ответ? Посмотрите другие вопросы с метками php или задайте свой вопрос.

    Похожие

    Подписаться на ленту

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.11.35402

    Команда rmdir для начинающих (с примерами)

    Оригинал: Linux rmdir Command for Beginners (with Examples)
    Автор: Himanshu Arora
    Дата публикации: 9 февраля 2020 года
    Перевод: А. Кривошей
    Дата перевода: июль 2020 г.


    Итак, мы уже обсуждали команду rm, которая в основном используется для удаления файлов и каталогов из командной строки Linux. Однако есть еще одна связанная с ней утилита командной строки, которая специально предназначена для удаления каталогов. Этой утилитой является rmdir, и в этом руководстве мы обсудим ее основы, используя несколько простых для понимания примеров.

    Команда rmdir

    Как следует из названия, команда rmdir ориентирована на удаление каталогов, впрочем только пустых. Ниже приводится ее синтаксис:

    Вот как man-страница объясняет ее назначение:

    Удаляет директорию(ии), если они пусты.

    Следующие примеры в стиле вопрос/ответ должны дать вам представление о том, как работает эта утилита.

    Q1. Как работает rmdir?

    Это довольно просто — передайте имя каталога в качестве ввода команды. Например:

    Q2. Как заставить rmdir игнорировать непустые каталоги.

    По умолчанию команда rmdir выдает ошибку, если вы попытаетесь удалить непустой каталог. Однако, если вы хотите, вы можете отменить вывод ошибки, используя опцию —ignore-fail-on-non-empty.

    Илон Маск рекомендует:  orphans в CSS

    Q3. Как заставить rmdir удалить родительский каталог?

    Как и в случае с mkdir, вы также можете попросить rmdir выполнить ее работу в родительских каталогах. Это означает, что вы также можете сразу удалить родительские каталоги каталога. Эта функция доступна через опцию командной строки -p.

    Например, следующая команда удалит каталоги «test» и «test-dir».

    Примечание. Чтобы эта операция работала, все родительские каталоги не должны содержать ничего, кроме удаляемого пустого каталога.

    Q4. В чем разница между rmdir и rm -r?

    Если вы помните, вы также можете удалить каталоги, используя команду rm, включив опцию -r. Так в чем разница между нею и rmdir? Ответ в том, что rmdir работает только в случае пустых каталогов — нет никакого способа, каким вы могли бы заставить rmdir удалить непустые каталоги.

    Таким образом, rmdir полезна в в тех ситуациях, когда вам нужно проверить, пуст ли каталог, до его удаления.

    Заключение

    Как можно видеть, rmdir не является сложной для понимания и использования командой. Кроме того, она предлагает только несколько вариантов командной строки. Мы обсудили почти все их здесь. На всякий случай вам может понадобится man-страница для rmdir .

    rmdir

    (PHP 4, PHP 5, PHP 7)

    rmdir — Удаляет директорию

    Описание

    Пытается удалить директорию с именем dirname . Директория должна быть пустой и должны иметься необходимые для этого права. При неудачном выполении будет сгенерирована ошибка уровня E_WARNING .

    Список параметров

    Путь к директории.

    Замечание: Поддержка контекста была добавлена в PHP 5.0.0. Для описания контекстов смотрите раздел Потоки.

    Возвращаемые значения

    Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

    Список изменений

    Версия Описание
    5.0.0 Начиная с версии PHP 5.0.0, функция rmdir() также может быть использована с некоторыми обёртками URL. Обратитесь к Поддерживаемые протоколы и обертки для получения списка обёрток, которые поддерживают rmdir() .

    Примеры

    Пример #1 Пример использования rmdir()

    if (! is_dir ( ‘examples’ )) <
    mkdir ( ‘examples’ );
    >

    Примечания


    Замечание: Когда опция safe mode включена, PHP проверяет, имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.

    Смотрите также

    • is_dir() — Определяет, является ли имя файла директорией
    • mkdir() — Создаёт директорию
    • unlink() — Удаляет файл

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

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

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

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

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

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

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

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

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

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

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

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

    Она выглядит вот так:

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

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

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

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

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

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

    10.6. Удаление: rm и rmdir

    10.6.1. rm

    Команда rm(1) удаляет файлы и целые деревья каталогов. Пользователи DOS найдут её похожей на команды del и deltree. rm может быть очень опасной, если вы не следите за своими действиями. Хотя в некоторых случаях можно восстановить только что удалённый файл, это может оказаться слишком сложным процессом (и, возможно, дорогостоящим), и его рассмотрение выходит за рамки этой книги.

    Чтобы удалить один файл, укажите его имя при запуске rm:

    Если для файла отсутствуют права на запись, вы можете получить сообщение об ошибке с отказом в доступе. Чтобы принудительно удалить неважно какой файл, используйте опцию -f, например так:

    Чтобы удалить целый каталог, используйте одновременно две опции -r и -f . Ниже представлен хороший пример, удаляющий всё содержимое на вашем жёстком диске. И вам наверняка не захочется его выполнить. А вот и сама команда:

    Будьте осторожны при работе с rm. Вы можете “выстрелить себе в ногу”. У этой команды также есть различные опции, которые хорошо описаны на странице руководства.

    10.6.2. rmdir

    Команда rmdir(1) удаляет каталоги из файловой системы. Каталог должен быть пуст перед удалением. Синтаксис довольно прост:

    В этом примере в текущем каталоге удаляется подкаталог hejaz:

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

    В этом примере будет сделана попытка удаления каталога hejaz, находящегося в каталоге /tmp.

    Вы также можете удалить каталог и все его родительские каталоги с помощью опции -p .

    В этом примере будет сначала сделана попытка удаления каталога hejaz, находящегося в каталоге /tmp. Если попытка удастся, утилита попытается удалить /tmp. Работа rmdir будет продолжаться до тех пор, пока не возникнет ошибка или не будет удалено всё указанное дерево.

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL