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 не удаляет папки, если в них есть файлы.