[PHP] Alle Dateien und Ordner rekursiv löschen

Drucken
( 0 Votes ) 
Hauptkategorie: Programmieren Kategorie: PHP
Erstellt am 31.05.2012 Zuletzt aktualisiert am 31.05.2012 Geschrieben von Jonny132
Will man seinen ganzen Webspace bzw FTP- Ordner ausmisten bzw. löschen, kann das unter anderem mit einem FTP-Programm ganz schön lange dauern. Mittels PHP lässt sich das einfach mittels einer rekursiven Funktion umsetzen.
Die Funktion nimmt immer einen Absoluten Pfad zum Ordner, welcher gelöscht werden soll, entgegen.
  

  DeleteRecursive.php:
<?php
function DeleteRecursive($absolutePath)
{
 $dir = opendir($absolutePath);
 $output = "";
 while ($pathItem = readdir($dir))
 {
   if ($pathItem!='..' && $pathItem!='.')
   {
     $toDelete = $absolutePath. '/' .$pathItem;
     if (is_dir($toDelete))
     {
       $output .= DeleteRecursive($toDelete);
       if (!rmdir($toDelete))
       {
         $output .= 'Ordner "' . $toDelete . '" konnte nicht gelöscht werden <br />';
       }
     }
     else
     {
       if (!unlink($toDelete))
       {
         $output .= 'Datei "' . $toDelete . '" konnte nicht gelöscht werden <br />';
       }
     }
   }
 }
return $output;
}

echo DeleteRecursive(dirname(__FILE__).DIRECTORY_SEPARATOR);
echo 'L&ouml;schvorgang abgeschlossen!';
?>
 
In der Rekursiven Funktion wir zuerst ein 'Ordner-Objekt' mittels opendir() erstellt, auf welches wir mittels readdir()-Funktion über alle vorhandenen Ordner und Dateien iterieren (while-Schleife) können.

Da die readdir()-Funktion auch immer die Einträge '.' für das aktuelle Verzeichnis und '..' für das Übergeordnete Verzeichnis liefert müssen wir diese mittels If-Abfrage ausschliessen.

Danach setzen wir den absoluten Pfad mit dem Eintrag aus der iteration zusammen und überprüfen mittels is_dir(), ob es sich um einen Ordner oder eine Datei handelt.

Im Falle eines Ordners, rufen wir wiederrum die DeleteRecursive-Funktion auf, somit haben wir schonmal die Rekursion.
Darauf folgend wird mittels der rmdir()-Funktion der Ordner gelöscht. Liefert diese Funktion false, ist etwas schiefgelaufen und wir fügen eine Nachricht an unsere Ausgabe an.

Im Falle einer Datei, wird versucht mittels unlink()-Funktion die Datei zu löschen. Schlägt diese fehl, fügen wir wiederrum eine Nachricht an unsere Ausgabe hinzu.

Zu Ende der Funktion wird die Ausgabe an den Aufrufer mittels return zurückgegeben.

Am Ende der Datei wird nun die rekursive Funktion aufgerufen. Als Parameter übergeben wir den aktuellen absoluten Pfad der DeleteRecursive.php - Datei, den wir mittels der dirname()-Funktion und der __FILE__ - Konstante bekommen. Dann wird noch eine Erfolgsmeldung ausgegeben.

    Veröffentlichen Sie ihre Kommentare ...