22.07.2021
Рассмотрим способ как найти и удалить все вложенные пустые директории на PHP без специальных библиотек (рекурсивно).
Для этого нам понадобится функция, которую будет вызывать рекурсивно для все внутренних каталогов. В комментариях как всегда указал каждый шаг:
function removeEmptyFolders($path)
{
$isFolderEmpty = true; // по умолчание ставим, что текущий раздел пустой
if(substr($path, -1) == "/") // смотрим последний символ пути
$pathForGlob = $path . "*"; // добавим "*" в конце
else
$pathForGlob = $path . DIRECTORY_SEPARATOR . "*"; // добавим "/*" в конце
// смотрим что есть внутри раздела
foreach (glob($pathForGlob) as $file)
{
if (is_dir($file)) // если это раздел
{
// рекурсивно запускаем нашу функцию еще
if (!removeEmptyFolders($file))
$isFolderEmpty = false;
}
else // если этой файл
{
// значит раздел не пустой
$isFolderEmpty = false;
}
}
// если раздел в итоге пустой, удаляем его
if ($isFolderEmpty)
rmdir($path);
// возвращаем значение
return $isFolderEmpty;
}
DIRECTORY_SEPARATOR - это спец.константа, которая определяет разделители в пути файлов (тип слеша)
Далее просто вызываем её для нужного нам абсолютного пути, например:
removeEmptyFolders("/home/bitrix/to-delete/");
И радуемся результату
Для информации: функция rmdir не удаляет папки, если в них есть файлы.