Php удалить папку с файлами
В php есть отдельная функция, которая удаляет директорию(папку), поэтому . давайте начнем с синтаксиса :
Синтаксис функции для удаления папки в php:
bool rmdir ( string dirname [, resource context] )
Разберем приведенный синтаксис.
возвращаемое значение - bool(true>false)
rmdir - название функции
dirname - название папки или путь до папки()рекомендую использовать путь_до_папки_на_сервере
resource context - посмотрите в интернете.
Упрощенный синтаксис функции для удаления папки в php:
И есть НО ! Данная функция удаляет папку только в том случае, когда папку пустая и есть соответствующие права доступа.Пример использования функции для удаления папки
Рекомендую использовать функцию для удаления папки вот в такой связке.
Где is_dir - проверяет - существует ли данная папка по указанному пути "path"(как я уже говорил ранее - рекомендую использовать путь на сервере до файла).
Для чего нужна такая конструкция - если вы напишите вот так:
Если папка существует - папка будет удалена.
Если папка не существует вернет ошибку типа E_WARNING
Удалить папки php
Давайте немного подумаем над формулировкой:
Удалить папки php.
В данной строке . непонятно. будем ли удалять саму папку . или же очищенная папка останется?
Поэтому. первая функция это:
Удаляем папки внутри папки.
Т.е. по другому можно сказать, что мы очистим папку отт других папок, а очищенная папка останется на сервер.
// модифицированная функция scandir с удалением виртуальных директорий
// функция очищения папки
foreach ($list as $file) // foreach
Указанная очищаемая папка удалена не будет. Все папки и файлы, которые внутри будут удаленны.
php удалить папку со всем содержимым
Далее рассмотрим код, который удалит все папки и файлы и саму папку указанную в $dir.
Это почти аналог предыдущей функции, только мы добавили проверку. на существование удаляемой папки.
Поскольку после удаления папки . папка существовать не будет и после перезагрузки повыскакивают "E_WARNING", то нужна проверка :
+ Проверим на пустоту саму очищаемую папку. после того, как она окажется пустой. удаляем и эту папку.
В предыдущей статье мы с Вами разбирали функции для работы с каталогами в 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), сколько полезен для развития Вашего мышления. Это очень простой алгоритм и решает он весьма и весьма сложную задачу. Поэтому учитесь составлять алгоритмы - это самое главное в любом языке программирования.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 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
Заметьте, что в функции нет ни единого цикла.
Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все.
Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса.
Ведет блог о разработке, дайджест в телеграмме и в ВК.
Спасибо за идею, но у меня эта функция не сработала так, как хотелось бы. Я немного подкорректировал функцию и вызов. Теперь она удаляет указанную папку со всеми подпапками и файлами:
function removeDir($path) return is_file($path)?
@unlink($path):
array_map('removeDir',glob($path."/*"))==@rmdir($path);
>
// Пример вызова
$path = $_SERVER['DOCUMENT_ROOT'].'/test';
removeDir($path);
А если removeDir в классе определять? Как указывать первый параметр array_map?
Все достаточно просто
array_map(array($this, 'removeDir'), glob(. ))
Вы не правы насчет не используются цикла как рас используются вы применяется callback функцию что рекурсивно вызывается на каждое значение массива
Визуально в коде нет ни одного цикла. Код читается проще. О внутреннем устройстве функций РНР речи не идет.
А можете объяснить нубу почему эта функция у меня ругается на фигурные скобки в условии, а если их удалить, то начинает ругаться на собаку?
Текст ошибки в студию!
То есть ошибку не покажите?
в стоке 2 не хватает скобки
if (is_file($path) <
вот и ошибка
Вообще чувак cPanel дописывает, такой фигни не заметил =) гы.
Есть такое дело 🙂
серврере ложится надо что-то полегче
Service Temporarily Unavailable
The server closed the connection without sending any data.
The server is temporarily unable to service your request due to maintenance downtime or capacity problems.
Due to heavy load on the server, connections may be temporarily blocked from locations that fetch an unusually high number of pages.
We apologize for the inconvenience.
Для создания папки применяется функция mkdir. Обязательным параметром для этой функции является pathname, где задается путь к создаваемой директории.
При таком указании папки, она будет создана в той же директории, из которой был запущен php-скрипт. Если нужно создать каталог в другом месте, можно задать относительный путь к создаваемой папке или указать полный путь от корневой директории сайта.
В последнем примере обязательным условием будет существование подкаталогов "folder1" и "folder2". Если их не будет, функция, в таком виде не сможет выполнить создание папки и вернет ошибку:
В случае удачного выполнения, функция возвращает значение True. Если пака не была создана, возвращается значение False.
Но не стоит использовать эту функцию без проверки на наличие папки, так как ошибку о том, что не удалось создать папку, сервер все равно будет выводить.
Назначение прав при создании папки
За назначение прав на создаваемую папку отвечает второй необязательный параметр функции mkdir. По умолчанию, назначаются максимальные привилегии – 0777.
Права назначаются восьмеричным значением с обязательным нулем на первом месте. Не считая первого нуля, числа означают уровни доступа для владельца, для группы владельца, для всех остальных.
0 – доступ закрыт;
1 – доступ для чтения;
2 – доступ на запись;
4 – доступ на выполнение.
Чаще всего права задаются составной суммой, например:
7 – полный доступ (1+2+4);
5 – чтение и выполнение (1+4).
Создание нескольких вложенных поддиректорий
Создать несколько вложенных папок сразу можно, просто задав еще один необязательный логический параметр – recursive.
Удаление папки
Пустую папку в PHP можно удалить функцией rmdir. В параметре dirname для нее так же задается полный или относительный путь к удаляемому каталогу:
В каждом из указанных случаев удаляется только папка "myfolder". Если папки нет или путь задан некорректно, будет выведена ошибка:
Удаление непустой папки
Удаления непустого каталога выполняется путем последовательного удаления вложенных файлов в папке функцией unlink, а затем удаление пустой папки функцией rmdir. Для этого можно использовать подобную функцию:
Проверка существования каталога
Перед большинством операций с каталогами стоит проверять, существуют ли они. Для этого применяется функция file_exists.
Помимо этого нужно убедиться, что указанный объект именно папка, а не файл - функция is_dir. Проверяемая папка задается относительным или полным путем.
Читайте также: