Verzeichnis in PHP löschen

Subodh Poudel 20 Juni 2023
  1. Verwenden Sie die Funktion rmdir(), um ein leeres Verzeichnis in PHP zu löschen
  2. Verwenden Sie Rekursion, um nicht leere Verzeichnisse in PHP zu löschen
Verzeichnis in PHP löschen

In diesem Tutorial werden zwei Möglichkeiten zum Löschen eines Verzeichnisses in PHP erläutert. Hier werden wir uns mit zwei Szenarien beschäftigen.

Der erste löscht ein leeres Verzeichnis und der zweite löscht ein nicht leeres Verzeichnis.

Verwenden Sie die Funktion rmdir(), um ein leeres Verzeichnis in PHP zu löschen

Wir können die Funktion rmdir() verwenden, um ein leeres Verzeichnis in PHP zu löschen. Die Funktion ist eine eingebaute PHP-Funktion.

Die Funktion löscht das Verzeichnis nur, wenn darin kein Inhalt vorhanden ist. Das zu löschende Verzeichnis können wir als Parameter an die Funktion rmdir() übergeben.

Die Funktion gibt im Erfolgsfall true und andernfalls false zurück.

Das Verzeichnis sollte vorhanden sein, um ein Verzeichnis zu entfernen. Wir werden die Funktion mkdir() verwenden, um ein Verzeichnis für die Demonstration zu erstellen.

Die Funktion nimmt den Pfadnamen als Parameter.

Erstellen Sie beispielsweise eine Variable $path und speichern Sie den Pfadnamen eines zu erstellenden Verzeichnisses. Als nächstes verwenden Sie die Funktion mkdir() mit dem $path als Parameter.

Beispielcode:

$path =$_SERVER['DOCUMENT_ROOT']."/newFolder";
mkdir($path);

Das obige Codebeispiel erstellt ein Verzeichnis newFolder im PHP-Dokumentenstamm. Wenn Sie die Variable $path drucken, sieht die Ausgabe unter Linux so aus.

/var/www/html/newFolder

Unter Windows sieht die Ausgabe in etwa so aus.

C:\xampp\htdocs\newFolder

Da wir ein Verzeichnis erstellt haben, ist es nun an der Zeit, es mit rmdir() zu löschen.

Beispielcode:

if(is_dir($path)){
 rmdir($path);
 echo "the directory is deleted";
}

Ausgang:

the directory is deleted

Wir haben überprüft, ob das Verzeichnis existiert, indem wir die Funktion is_dir() und die Funktion rmdir() verwendet haben, um das Verzeichnis myFolder im Dokumentenstamm zu löschen.

Verwenden Sie Rekursion, um nicht leere Verzeichnisse in PHP zu löschen

Da wir wissen, dass rmdir() nur das leere Verzeichnis löscht, müssen wir eine rekursive Funktionalität und rmdir() verwenden, um ein nicht leeres Verzeichnis in PHP zu löschen. In dieser Methode verwenden wir einige PHP-Funktionen wie array_diff(), scandir() und unlink().

Die Funktion array_diff() nimmt mehrere Arrays als Parameter und gibt ein Array mit den Werten zurück, die nur im ersten Parameter-Array vorhanden sind.

Die Funktion scandir() listet alle Dateien und Verzeichnisse eines angegebenen Pfads auf. Die Funktion unlink() löscht die in ihrem Parameter angegebene Datei.

Das Konzept hinter dem Löschen eines Verzeichnisses befasst sich rekursiv damit, zuerst alle Dateien und Ordner in einem Verzeichnis zu finden. Dann wird eine Schleife erstellt, um alle Inhalte innerhalb des übergeordneten Verzeichnisses zu durchlaufen.

Die rekursive Operation wird für jeden Ordner innerhalb des übergeordneten Verzeichnisses angewendet, bis die Tiefe erreicht ist. In der Tiefe wird die Datei mit der Funktion unlink() gelöscht.

Das Programm kehrt zu seinem durchlaufenen Pfad zurück und löscht alle Dateien. Nach dem Löschen aller Dateien wird schließlich das übergeordnete Verzeichnis gelöscht.

Betrachten wir ein Szenario, in dem die Verzeichnisstruktur wie folgt aussieht.

testFolder
├── abc.png
├── abc.text
└── sub
 └── abc.jpeg

Das folgende Codebeispiel löscht testFolder rekursiv.

Beispielcode:

function deleteDirectory($path){

 $files = array_diff(scandir($path), array('.','..'));
 foreach($files as $file){
 (is_dir("$path/$file")) ? deleteDirectory("$path/$file") : unlink("$path/$file");
 }
 return rmdir($path);
}
$path =$_SERVER['DOCUMENT_ROOT']."/testFolder";
deleteDirectory($path);

Hier ist die Funktion deleteDirectory() eine benutzerdefinierte Funktion, die einen Parameter $path übernimmt, der der Pfadname des zu löschenden Verzeichnisses ist. testFolder ist der mitgelieferte $path.

Zuerst wird die verschachtelte scandir()-Funktion ausgeführt. Es listet den gesamten Inhalt des Verzeichnisses testFolder als Array auf.

Array ( [0] => . [1] => .. [2] => abc.png [3] => abc.text [4] => sub )

Als nächstes haben wir die Funktion array_diff() verwendet, um . zu entfernen. und .. aus dem obigen Array. Der einfache Punkt stellt das aktuelle Verzeichnis dar, während der doppelte Punkt das übergeordnete Verzeichnis darstellt.

Als Ergebnis enthält das Array $files abc.png, abc.text und sub. Dann haben wir die Schleife foreach() verwendet, um diese Dateien und Ordner zu durchlaufen.

Innerhalb der Schleife haben wir überprüft, ob das Iterable ein Verzeichnis ist. Aber die ersten beiden Punkte sind es nicht.

Sie werden also mit der Funktion unlink() entfernt. Das dritte iterierbare sub ist ein Verzeichnis, das die Bedingung erfüllt.

Die Funktion deleteDirectory() wird also rekursiv aufgerufen. Dieses Mal enthält das Verzeichnis nur eine einzige Datei.

Die Datei wird wie die anderen Dateien mit der Funktion unlink() gelöscht. Schließlich verlässt die Ausführung die Schleife.

Als nächstes wird das Verzeichnis sub mit der Funktion rmdir() gelöscht. Dann geht der rekursive Baum zurück und das übergeordnete Verzeichnis testFolder wird gelöscht.

So haben wir gelernt, wie man mit verschiedenen Funktionen in PHP ein Verzeichnis rekursiv löscht.

Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

Verwandter Artikel - PHP Directory