PHP Пустая папка не удаляется с помощью команды rmdir

0

Мой код выглядит следующим образом:

<?php
    header("Location: ../");
    unlink("index.php");
    unlink("style.css");
    unlink("success.php");
    unlink("fail.php");
    unlink("remove.php");
    unlink("README.md");
    unlink(".gitignore");
    unlink(".git");
    rmdir("../Humble-Installer");
    die();

Но каждый раз, когда я запускаю его, я получаю следующую ошибку:

[17-Nov-2014 19:47:37 Pacific/Auckland] PHP Warning:  unlink(.git): Operation not permitted in /Users/user/Humble/admin/Humble-Installer/remove.php on line 10
[17-Nov-2014 19:47:37 Pacific/Auckland] PHP Warning:  rmdir(../Humble-Installer): Directory not empty in /Users/user/Humble/admin/Humble-Installer/remove.php on line 11

Я понятия не имею, каталог пуст, но не удалит... даже если я удалю unlink(."git"); он все еще выдает ошибку?

Приветствия.

Теги:
directory
unlink
rmdir

2 ответа

5
Лучший ответ

Вы можете использовать эту простую функцию для рекурсивного удаления папки:

function rrmdir($dir) { 
    if (is_dir($dir)) { 
        $objects = scandir($dir); 
        foreach ($objects as $object) { 
            if ($object != "." && $object != "..") { 
                if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); 
            } 
        }
        reset($objects); 
        rmdir($dir); 
    }
}

Заметки:

unlink для файла, .git - это каталог, поэтому он не будет удален, используйте rmdir. Если вы хотите сделать это рекурсивно, используйте функцию, которую я написал выше.

Обновить

Если вы хотите использовать RecursiveIteratorIterator, вы можете использовать эту функцию:

/**
 * Remove directory recursively.
 *
 * @param string $dirPath Directory you want to remove.
 */
function recursive_rmdir($dirPath)
{
    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dirPath, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST) as $path) {
        $pathName = $path->getPathname();

        echo $pathName."\n";

        ($path->isDir() and ($path->isLink() === false)) ? rmdir($pathName) : unlink($pathName);
    }
}
  • 0
    Приветствия, извините, что я нашел подобный пост, не думал, что .git был каталогом, это было глупо с моей стороны.
1

простейшая функция с использованием glob

function removeDirectory($directory)
{
    $files=glob($directory.'/*');
    foreach ($files as $file)
    {
        if(is_dir($file))
        {
            removeDirectory($file);
            continue;
        }
        unlink($file);
    }
    rmdir($directory); 
}

эта функция удалит все файлы и папки внутри данного каталога и в конечном каталоге.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню