Раздел: PHP Cookbook

Удаление каталога с помощью PHP

Бывает, что нужно удалить содержимое каталога при помощи PHP.
Для удаления будем пользоваться двумя встроенными в PHP функциями: unlink (удаление файлов) и rmdir (удаление директорий. Функция rmdir устроена так, что удаляет только пустые каталоги (не содержащие других файлов и каталогов, даже пустых). Поэтому, нам потребуется рекурсивный подход.

Данная функция удалит указанный каталог полностью:

function catalogremover ($dir){
$list=glob($dir."/*");
for ($i=0; $i < count($list); $i++) {

	if (is_dir($list[$i])) {
		echo "<br>Входим в директорию $list[$i] <br>";
		catalogremover($list[$i]);
	}
	else {
		unlink($list[$i]);
		echo "Файл $list[$i] Удалён <br>";
	};
};

	rmdir($dir);
	echo "Директория $dir Удалена <br>";
}

А вот если указанную директорию нужно очистить, но не удалять саму папку, указываемую для очистки, то я предлагаю делать как-то так:

function catalogremover2 ($dir){
$list=glob($dir."/*");
for ($i=0; $i < count($list); $i++) {

	if (is_dir($list[$i])) {
		echo "<br>Входим в директорию $list[$i] <br>";
		catalogremover2($list[$i]);
	}
	else {
		unlink($list[$i]);
		echo "Файл $list[$i] Удалён <br>";
	};

	if (is_dir($list[$i])) {
		rmdir($list[$i]);
		echo "Директория $list[$i] Удалена <br>";
	};
};
}

Если же нужно удалить все файлы определённого расширения, то это можно сделать так:

function catalogremover3 ($dir, $mask){
foreach (glob($dir."/*.$mask") as $filename) {
	unlink($filename);
	echo "Файл $filename Удалён <br>";
}
$list=glob($dir."/*");
for ($i=0; $i < count($list); $i++) {

	if (is_dir($list[$i])) {
		echo "<br>Входим в директорию $list[$i] <br>";
		catalogremover3($list[$i], $mask);
	}
};
}

В данном случае на вход нужно подавать каталог (директорию) и расширение файлов без точки.

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

Комментировать

Комментарии

3 + 7 =