Как найти и удалить все вложенные пустые папки на PHP

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


Возврат к списку