Как удалить папку php

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

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

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

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

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

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

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

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

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

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

Источник

Создание, назначение доступа, удаление и проверка наличия папки в PHP

Создание каталога

Для создания папки применяется функция mkdir. Обязательным параметром для этой функции является pathname, где задается путь к создаваемой директории.

При таком указании папки, она будет создана в той же директории, из которой был запущен php-скрипт. Если нужно создать каталог в другом месте, можно задать относительный путь к создаваемой папке или указать полный путь от корневой директории сайта.

В последнем примере обязательным условием будет существование подкаталогов «folder1» и «folder2». Если их не будет, функция, в таком виде не сможет выполнить создание папки и вернет ошибку:

В случае удачного выполнения, функция возвращает значение True. Если пака не была создана, возвращается значение False.

Но не стоит использовать эту функцию без проверки на наличие папки, так как ошибку о том, что не удалось создать папку, сервер все равно будет выводить.

Назначение прав при создании папки

За назначение прав на создаваемую папку отвечает второй необязательный параметр функции mkdir. По умолчанию, назначаются максимальные привилегии – 0777.

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

1 – доступ для чтения;

2 – доступ на запись;

4 – доступ на выполнение.

Чаще всего права задаются составной суммой, например:

7 – полный доступ (1+2+4);

5 – чтение и выполнение (1+4).

Создание нескольких вложенных поддиректорий

Создать несколько вложенных папок сразу можно, просто задав еще один необязательный логический параметр – recursive.

В этом случае, если папок «folder1» и «folder2» нет, функция создаст и их, и папку «newfolder». Сообщений об ошибках, если других проблем не возникнет, выведено не будет и функция вернет значение True.

Удаление папки

Пустую папку в PHP можно удалить функцией rmdir. В параметре dirname для нее так же задается полный или относительный путь к удаляемому каталогу:

В каждом из указанных случаев удаляется только папка «myfolder». Если папки нет или путь задан некорректно, будет выведена ошибка:

Удаление непустой папки

Удаления непустого каталога выполняется путем последовательного удаления вложенных файлов в папке функцией unlink, а затем удаление пустой папки функцией rmdir. Для этого можно использовать подобную функцию:

Проверка существования каталога

Перед большинством операций с каталогами стоит проверять, существуют ли они. Для этого применяется функция file_exists.

Источник

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

Как удалить папку php. Смотреть фото Как удалить папку php. Смотреть картинку Как удалить папку php. Картинка про Как удалить папку php. Фото Как удалить папку php

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

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

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

Как удалить папку php. Смотреть фото Как удалить папку php. Смотреть картинку Как удалить папку php. Картинка про Как удалить папку php. Фото Как удалить папку php

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

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

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

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

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

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

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

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

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

Источник

Быстрый способ удаления папки на PHP

В РНР для удаления файла существует функция unlink (), для удаления пустого каталога — rmdir (). Что делать если нужно рекурсивно удалить папку со всеми файлами и подкаталогами. На помощь приходит glob () в связке с array_map ().

Заметьте, что в функции нет ни единого цикла.

Суровый русский тимлид. Жил в Магадане, в офисе московских веб студий и в Тульской деревне. Виртуозно знает WordPress, PHP, ООП, Vue.js и вот это вот все.

Делает крутые высоконагруженные сайты, поэтому уже почти захватил весь рынок WordPress разработки в России. Не дает никому делать сайты без спроса.

Ведет блог о разработке, дайджест в телеграмме и в ВК.

Спасибо за идею, но у меня эта функция не сработала так, как хотелось бы. Я немного подкорректировал функцию и вызов. Теперь она удаляет указанную папку со всеми подпапками и файлами:

function removeDir($path) <
return is_file($path)?
@unlink($path):
array_map(‘removeDir’,glob($path.»/*»))==@rmdir($path);
>

Да, вы правы — так будет лучше. Поправил в статье.

А если removeDir в классе определять? Как указывать первый параметр array_map?

Все достаточно просто

array_map(array($this, ‘removeDir’), glob(. ))

Вы не правы насчет не используются цикла как рас используются вы применяется callback функцию что рекурсивно вызывается на каждое значение массива

Визуально в коде нет ни одного цикла. Код читается проще. О внутреннем устройстве функций РНР речи не идет.

А можете объяснить нубу почему эта функция у меня ругается на фигурные скобки в условии, а если их удалить, то начинает ругаться на собаку?

Текст ошибки в студию!

А, да всё… Я решил проблему — не использую этот скрипт. Всё равно там же используется скрипт создания субдомена через cPanel. Я его немного дописал и он ещё и папки теперь удаляет.

То есть ошибку не покажите?

в стоке 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.

Источник

rmdir

(PHP 4, PHP 5, PHP 7, PHP 8)

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

Описание

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

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

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

Примеры

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

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

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

User Contributed Notes 29 notes

Glob function doesn’t return the hidden files, therefore scandir can be more useful, when trying to delete recursively a tree.

Never ever use jurchiks101 at gmail dot com code. It contains command injection vulnerability.
If you want to do it that way, use something like this instead:

some implementations of recursive folder delete don’t work so well (some give warnings, other don’t delete hidden files etc).

Thanks to itay for the original function, though, it was helpful.

Say, you’re working on Windows and continue to get a permission’s error without a reason. Then it may be that a different Windows program is working on the folder (see earlier notes also). In the case that you can’t find that program, the line

I was working on some Dataoperation, and just wanted to share an OOP method with you.

It just removes any contents of a Directory but not the target Directory itself! Its really nice if you want to clean a BackupDirectory or Log.

Also you can test on it if something went wrong or if it just done its Work!

I have it in a FileHandler class for example, enjoy!

Another simple way to recursively delete a directory that is not empty:

This issue has been driving me nuts for hours.

I am running PHP on IIS, I had the wincache module installed, when running a recursive delete a certain folder would get «stuck» and throw permissions errors. I was not able to delete them with PHP or in windows itself. The only way to delete the folder was to wait 5 min and run the script again, or stop the IIS server and the folder would delete on its own. Disabling the wincachce module resolved the issue.

it Will Delete All Fildes in folder and that folder too.

It is rather dangerous to recurse into symbolically linked directories. The delTree should be modified to check for links.

Keep in mind that if you know what your host OS is, you can always just call the appropriate system call using exec() or the like. For example:

I’ve noticed that when using this command on a windows platform you may encounter a permissions error which may seem unwarranted. This commonly occurs if you are or were using a program to edit something in the to be deleted folder and either the item is still in the folder or the program that was accessing the file in that folder is still running(causing it to hold onto the folder).

SO. if you get a permissions error and there shouldn’t be an issue with folder permissions check if there are files in there then check if there is a program running that is or was using a file that was in that folder and kill it.

Function deleteAll given by O S on 18-Jun-2010 11:30 will fail at line

while ($contents = readdir($directoryHandle)) <.

if a folder named 0 (zero) is found during traversing the hierarchy

A patch to previous script to make sure rights for deletion is set:

if you get this problem Permission denied in windows testing your site maybe this will resolve the problem

I wasn’t having much luck with the recursive delete functions below, so I wrote my own:

This isn’t my code, but just thought I would share, since it took me so long to find. This is a function to delete a folder, all sub-folders, and files in one clean move.

// Recursive PHP function to completely remove a directory

> // end of iteration through directories / files of provided path

> // end of delete_directory_recursively() function definition

Concise way to recursively remove a directory:

I had situation where the rmdir was returning warning message as within last loop it was already removed. So here is quick fix by adding is_dir to the DelTree routine below

This version delete tree

//This is one example to delete full directory with all files inside there

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *