🔎

Як знайти та видалити всі порожні папки на PHP?

Виникла необхідність (через ліміт інодів на хостингу) видалити всі порожні директорії на сайті. Підкажіть як це зробити на PHP?
php
2 відповіді
  • Олег
    Ось функція, яка рекурсивно перевіряє наявність файлів у директоріях і видаляє їх у випадку, якщо файли не знайдені. Також буде виведений список таких папок.
    <?php
    function removeEmptyFolders($path) {
    $isFolderEmpty = true;
    if (substr($path, -1) == '/') {
    $pathForGlob = $path.'*';
    } else {
    $pathForGlob = $path.'/*';
    }
    foreach (glob($pathForGlob) as $file) {
    if (is_dir($file)) {
    if (!removeEmptyFolders($file)) {
    $isFolderEmpty = false;
    }
    } else {
    $isFolderEmpty = false;
    }
    }
    if ($isFolderEmpty) {
    echo $path.'<br />';
    rmdir($path);
    }
    return $isFolderEmpty;
    }
    removeEmptyFolders($_SERVER['DOCUMENT_ROOT'].'/');
  • Ігор
    Я використовую трішки іншу функцію:
    function removeEmptyDirs($dir) {
    // Перевіряємо, чи $dir — це дійсна директорія
    if (!is_dir($dir)) return;

    // Отримуємо список усіх елементів в директорії
    $files = scandir($dir);
    foreach ($files as $file) {
    // Пропускаємо "." та ".."
    if ($file === '.' || $file === '..') continue;

    $fullPath = $dir.DIRECTORY_SEPARATOR.$file;

    // Якщо це папка — викликаємо функцію рекурсивно
    if (is_dir($fullPath)) {
    removeEmptyDirs($fullPath);
    }
    }

    // Після рекурсивного видалення перевіряємо, чи директорія порожня
    $files = array_diff(scandir($dir), ['.', '..']);
    if (empty($files)) {
    rmdir($dir);
    echo "Видалено порожню директорію: $dir\n";
    }
    }

    removeEmptyDirs($_SERVER['DOCUMENT_ROOT'].'/uploads');