PHP Löschen eines Verzeichnisses inkl. Dateien funktioniert nicht.
bearbeitet von
Ich habe ein Problem mit der Funktion rec_rmdir, die auf dieser Seite vorgestellt wird.
<https://wiki.selfhtml.org/wiki/PHP/Tutorials/Rekursives_L%C3%B6schen_von_Verzeichnissen>
Meine Verzeichnisstruktur:
Index.php
Unterverzeichnis: NeuerOrdner – darin befinden sich bild1.jpg, bild2.jpg.
Wenn das Verzeichnis NeuerOrdner leer ist, kann ich es mit der index.php und rmdir („NeuerOrdner“); problemlos löschen.
Wenn ich in der index.php den Code aus dem obigen Tutorial verwende (wenn „NeuerOrdner“ nicht leer ist), passiert nichts:
~~~ php
<?php
$path = „NeuerOrdner“;
// rec_rmdir - loesche ein Verzeichnis rekursiv
// Rueckgabewerte:
// 0 - alles ok
// -1 - kein Verzeichnis
// -2 - Fehler beim Loeschen
// -3 - Ein Eintrag eines Verzeichnisses war keine Datei und kein Verzeichnis und
// kein Link
function rec_rmdir ($path) {
// schau' nach, ob das ueberhaupt ein Verzeichnis ist
if (!is_dir ($path)) {
return -1;
}
// oeffne das Verzeichnis
$dir = @opendir ($path);
// Fehler?
if (!$dir) {
return -2;
}
// gehe durch das Verzeichnis
while ($entry = @readdir($dir)) {
// wenn der Eintrag das aktuelle Verzeichnis oder das Elternverzeichnis
// ist, ignoriere es
if ($entry == '.' || $entry == '..') continue;
// wenn der Eintrag ein Verzeichnis ist, dann
if (is_dir ($path.'/'.$entry)) {
// rufe mich selbst auf
$res = rec_rmdir ($path.'/'.$entry);
// wenn ein Fehler aufgetreten ist
if ($res == -1) { // dies duerfte gar nicht passieren
@closedir ($dir); // Verzeichnis schliessen
return -2; // normalen Fehler melden
} else if ($res == -2) { // Fehler?
@closedir ($dir); // Verzeichnis schliessen
return -2; // Fehler weitergeben
} else if ($res == -3) { // nicht unterstuetzer Dateityp?
@closedir ($dir); // Verzeichnis schliessen
return -3; // Fehler weitergeben
} else if ($res != 0) { // das duerfe auch nicht passieren...
@closedir ($dir); // Verzeichnis schliessen
return -2; // Fehler zurueck
}
} else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) {
// ansonsten loesche diese Datei / diesen Link
$res = @unlink ($path.'/'.$entry);
// Fehler?
if (!$res) {
@closedir ($dir); // Verzeichnis schliessen
return -2; // melde ihn
}
} else {
// ein nicht unterstuetzer Dateityp
@closedir ($dir); // Verzeichnis schliessen
return -3; // tut mir schrecklich leid...
}
}
// schliesse nun das Verzeichnis
@closedir ($dir);
// versuche nun, das Verzeichnis zu loeschen
$res = @rmdir ($path);
// gab's einen Fehler?
if (!$res) {
return -2; // melde ihn
}
// alles ok
return 0;
}
?>
Wie Ihr seht kenn ich mich nicht aus.
Auch wenn ich im gleichen Verzeichnis wie die index.php die Datei recrmdir.inc.php hineinstelle und die index.php wie folgt aussieht, funktioniert es nicht.
<?php
$path = „NeuerOrdner“;
require 'recrmdir.inc.php';
?>
~~~
Bitte welche Fehler mache ich bei der Parameter Übergabe?
Danke schon mal für eure Hilfe!
GLG Margit
PHP Löschen eines Verzeichnisses inkl. Dateien funktioniert nicht.
bearbeitet von
Ich habe ein Problem mit der Funktion rec_rmdir, die auf dieser Seite vorgestellt wird.
<https://wiki.selfhtml.org/wiki/PHP/Tutorials/Rekursives_L%C3%B6schen_von_Verzeichnissen>
Meine Verzeichnisstruktur:
Index.php
Unterverzeichnis: NeuerOrdner – darin befinden sich bild1.jpg, bild2.jpg.
Wenn das Verzeichnis NeuerOrdner leer ist, kann ich es mit der index.php und rmdir („NeuerOrdner“); problemlos löschen.
Wenn ich in der index.php den Code aus dem obigen Tutorial verwende (wenn „NeuerOrdner“ nicht leer ist), passiert nichts:
<?php
$path = „NeuerOrdner“;
// rec_rmdir - loesche ein Verzeichnis rekursiv
// Rueckgabewerte:
// 0 - alles ok
// -1 - kein Verzeichnis
// -2 - Fehler beim Loeschen
// -3 - Ein Eintrag eines Verzeichnisses war keine Datei und kein Verzeichnis und
// kein Link
function rec_rmdir ($path) {
// schau' nach, ob das ueberhaupt ein Verzeichnis ist
if (!is_dir ($path)) {
return -1;
}
// oeffne das Verzeichnis
$dir = @opendir ($path);
// Fehler?
if (!$dir) {
return -2;
}
// gehe durch das Verzeichnis
while ($entry = @readdir($dir)) {
// wenn der Eintrag das aktuelle Verzeichnis oder das Elternverzeichnis
// ist, ignoriere es
if ($entry == '.' || $entry == '..') continue;
// wenn der Eintrag ein Verzeichnis ist, dann
if (is_dir ($path.'/'.$entry)) {
// rufe mich selbst auf
$res = rec_rmdir ($path.'/'.$entry);
// wenn ein Fehler aufgetreten ist
if ($res == -1) { // dies duerfte gar nicht passieren
@closedir ($dir); // Verzeichnis schliessen
return -2; // normalen Fehler melden
} else if ($res == -2) { // Fehler?
@closedir ($dir); // Verzeichnis schliessen
return -2; // Fehler weitergeben
} else if ($res == -3) { // nicht unterstuetzer Dateityp?
@closedir ($dir); // Verzeichnis schliessen
return -3; // Fehler weitergeben
} else if ($res != 0) { // das duerfe auch nicht passieren...
@closedir ($dir); // Verzeichnis schliessen
return -2; // Fehler zurueck
}
} else if (is_file ($path.'/'.$entry) || is_link ($path.'/'.$entry)) {
// ansonsten loesche diese Datei / diesen Link
$res = @unlink ($path.'/'.$entry);
// Fehler?
if (!$res) {
@closedir ($dir); // Verzeichnis schliessen
return -2; // melde ihn
}
} else {
// ein nicht unterstuetzer Dateityp
@closedir ($dir); // Verzeichnis schliessen
return -3; // tut mir schrecklich leid...
}
}
// schliesse nun das Verzeichnis
@closedir ($dir);
// versuche nun, das Verzeichnis zu loeschen
$res = @rmdir ($path);
// gab's einen Fehler?
if (!$res) {
return -2; // melde ihn
}
// alles ok
return 0;
}
?>
Wie Ihr seht kenn ich mich nicht aus.
Auch wenn ich im gleichen Verzeichnis wie die index.php die Datei recrmdir.inc.php hineinstelle und die index.php wie folgt aussieht, funktioniert es nicht.
<?php
$path = „NeuerOrdner“;
require 'recrmdir.inc.php';
?>
Bitte welche Fehler mache ich bei der Parameter Übergabe?
Danke schon mal für eure Hilfe!
GLG Margit