PHP: Удаление директории
Удаление пустой директории | rmdir()
$dir = __DIR__ . '/dir';
if (is_dir($dir)) rmdir($dir);
Если каталог не будет пуст, то получим ошибку:
Warning: rmdir(dir): Directory not empty in...
Удаление директории и её содержимого полностью
Данная функция рекурсивно удалит саму директорию и её содержимое:
function removeDirectory(string $dir): void
{
if (is_dir($dir)):
chmod($dir, 0777);
if ($elements = glob($dir . "/*")):
foreach($elements as $element):
is_dir($element) ? removeDirectory($element) : unlink($element);
endforeach;
endif;
rmdir($dir);
endif;
}
$dir = __DIR__ . '/dir';
removeDirectory($dir);
Вариант #2:
function removeDirectory(string $dir): void
{
if (is_dir($dir)):
$elements = array_diff(scandir($dir), ['.','..']);
foreach ($elements as $element):
is_dir("$dir/$element")
? removeDirectory("$dir/$element")
: unlink("$dir/$element");
endforeach;
rmdir($dir);
endif;
}
$dir = __DIR__ . '/dir';
removeDirectory($dir);
Удаление только содержимого директории
Данная функция удалит только содержимое директории (очистить её), если не передать в неё вторым параметром флаг на удаление самой директрии.
function clearDir(string $dir, bool $rmdir = false): void
{
if (is_dir($dir)):
if ($objs = glob($dir . '/*')):
foreach($objs as $obj):
is_dir($obj) ? clearDir($obj, true) : unlink($obj);
endforeach;
endif;
if ($rmdir) rmdir($dir);
endif;
}
$dir = __DIR__ . '/dir';
clearDir($dir);
// Очистить директорию и удалить саму директорию
clearDir($dir, true);
Удалить файлы из директории, кроме некоторых
Например, нужно удалить все файлы, кроме файла .htaccess
. Здесь важно то, что функция работает НЕ рекурсивно и удаляет только файлы:
function removeFilesExcept(string $dir, array $except): void
{
if (is_dir($dir)):
foreach (glob($dir . '/*') as $file):
if (!in_array(basename($file), $except) && is_file($file)):
unlink($file);
endif;
endforeach;
endif;
}
$dir = __DIR__ . '/dir';
$except = ['.htaccess'];
removeFilesExcept($dir, $except);
Предыдущая запись
Composer: Основные команды (шпаргалка)Следующая запись
Отличие include от require в PHP