InnePHP

Usuwanie katalogu wraz ze wszystkimi plikami i podkatalogami

Ostatnimi czasy, pisząc pewien skrypt PHP do obsługi plików na serwerze, potrzebowałem narzędzia, które usunie wskazany przeze mnie katalog. Sprawa nie byłaby trudna, gdyby chodziło o skasowanie folderu pustego (niezawierającego wewnątrz żadnych plików i innych podkatalogów). W tym celu wystarczyłoby użyć następującej funkcji:

<?php
$katalog = 'home/pliki';
rmdir($katalog);
?>

Gdzie zmienna $katalog zawiera ścieżkę do katalogu, który chcemy usunąć.

Sprawa komplikuje się jednak, kiedy zależy nam na permanentnym skasowaniu danego katalogu, wraz ze wszystkim co zawiera w sobie. Zastanawiałem się jak to wykonać, poszukując również odpowiedzi na kilku forach. Tam odnalazłem link do manual’a PHP. Gotowa funkcja, która pozwoli nam wykonać zamierzoną operację wygląda w sposób następujący:

function removeDir($path) {
$dir = new DirectoryIterator($path);
foreach ($dir as $fileinfo) {
if ($fileinfo->isFile() || $fileinfo->isLink()) {
unlink($fileinfo->getPathName());
} elseif (!$fileinfo->isDot() && $fileinfo->isDir()) {
removeDir($fileinfo->getPathName());
}
}
rmdir($path);
}

Aby wywołać powyższą funkcję, wystarczy, że w miejscu gdzie chcemy jej użyć, wpiszemy kod:

<?php
$katalog = 'home/pliki';
removeDir($katalog);
?>

To wszystko. Mam nadzieję, że przyda się komuś powyższe rozwiązanie.

komentarze 3

  • Awatar
    Max

    22 lutego 2013 01:15

    Wielkie Dzięki! Działa bez problemu :)

    Odpowiedz
  • Awatar
    ZEXE

    25 października 2013 14:40

    Czegos takiego szukałem. Miałem kilka folderów których niemogłem w normalny sposób usunąc teraz to co innego xD

    Odpowiedz
  • Awatar
    coolagi

    13 września 2016 09:37

    kilka słów objaśnień co do nawiasów $ i innych by sie przydało, bo umieszczając to wszystko niestety nie działa. kolory mają znaczenie zapewne bo skoro wyrazy sa wyróżnione to coś to musi oznaczać…
    mam 500 plików w Home które nie dają sie usunąć ze względu na brak uprawnień. pojęcia nie wiem skąd recupe_dir się potworzyło ale zabrało całe wolne miejsce. zwykłe polecenia rm niestety nie skutkują. Chciałem spróbować Twojego sposobu ale jak każdy informatyk nie mówisz „po polsku” więc jak byś mógł przetłumaczyć.. :D

    Odpowiedz

Zostaw odpowiedź