Как удалить каталог и все его содержимое (файлы и подкаталоги) в PHP?
php
recursion
delete-directory
Итай Моав -Малимовка
источник
источник
Ответы:
Пользовательский раздел на странице справочника
rmdir
содержит достойную реализацию:источник
is_dir
дважды для каждого повторяющегося каталога. Если аргумент является символической ссылкой, он также следует за ним вместо удаления символической ссылки, которая может или не может быть тем, что вы хотите. В любом случае, это не то, чтоrm -rf
делает.Основываясь на комментарии разработчика Pixel , фрагмент с использованием SPL может выглядеть так:
Примечание: Это не делает не проверки вменяемости и делает использование флага SKIP_DOTS введенного с FilesystemIterator в PHP 5.3.0. Конечно,
$todo
может бытьif
/else
. Важным моментом является то, чтоCHILD_FIRST
он используется для перебора дочерних элементов (файлов) перед их родительскими элементами (папками).источник
SKIP_DOTS
был введен только в PHP 5.3? Где ты это видел?getPathname()
метод вместоgetRealPath()
?rmdir($dir)
в конце сценария.rmdir()
иunlink()
, например, прерывается сE_WARNING
и возвращаетtrue
илиfalse
указывает на успех.FilesystemIterator
это не рекурсивный итератор.Удаляет все файлы и папки в пути.
источник
rm -rf /
==recurseRmdir('/')
:)is_dir("$dir/$file")
наis_dir("$dir/$file") && !is_link("$dir/$file")
Для * nix вы можете использовать
shell_exec
дляrm -R
илиDEL /S folder_name
для Windows.источник
DEL /S folder_name
WindowsRMDIR /S /Q folder_name
- это то, что сработало для меняexec('rm -rf ' . __DIR__ . '/output/*.log');
источник
Здесь есть еще один поток с большим количеством примеров: рекурсивная функция удаления каталога для PHP?
Если вы используете Yii, вы можете оставить это для фреймворка:
источник
«простой» код, который работает и может быть прочитан десятилетним ребенком:
Обратите внимание, что все, что я сделал, это расширил / упростил и исправил (не работал для непустого dir) решение здесь: В PHP как рекурсивно удалить все папки, которые не пусты?
источник
Улучшенное решение @Artefacto - исправлены опечатки и упрощен код, работающий как для пустых, так и для непустых каталогов.
источник
100% рабочий раствор
источник
Что-то вроде этого?
источник
Пример с функцией glob () . Он рекурсивно удалит все файлы и папки, включая файлы, начинающиеся с точки.
источник
system('rm -fr folder')
Функция unlinkr рекурсивно удаляет все папки и файлы по указанному пути, следя за тем, чтобы не удалять сам скрипт.
если вы хотите удалить все файлы и папки, в которые вы помещаете этот скрипт, то назовите его следующим образом
если вы хотите просто удалить только php-файлы, называйте это следующим образом
Вы также можете использовать любой другой путь для удаления файлов
Это удалит все файлы в каталоге home / user / temp.
источник
Я использую этот код ...
или этот ...
источник
Когда вы закончите выполнение тестов, просто удалите # из #unlink и #rmdir в классе.
источник
cleanup.php:
источник
Кажется, что все другие ответы предполагают, что путь к функции всегда является каталогом. Этот вариант работает для удаления каталогов, а также отдельных файлов:
источник
Использование DirectoryIterator и рекурсии правильно:
источник
Я просто сделал этот код из некоторых обсуждений StackOverflow. Я еще не тестировал в среде Linux. Это сделано для того, чтобы полностью удалить файл или каталог:
источник
источник
Модифицированный вариант решения @XzaR. Он удаляет пустые папки, когда из них удаляются все файлы, и выдает исключения, а не возвращает false при ошибках.
источник
источник
unlink
,rmdir
)opendir
+readdir
работает быстрее,scandir
иRecursiveDirectoryIterator
он также использует меньше памяти, чем все. Чтобы удалить папку я долженclosedir
сначала, я застрял на этом. Благодаря этому ответу.