Ordner samt Inhalt und Unterordner löschen.

nchristoph

Erfahrenes Mitglied
Hallo zusammen.

Ich versuche gerade ein Script zu schreiben, das mir einen Ordner samt Inhalt und Subordner löscht.

Ich hab mir etwas zusammen geschustert, nur löscht mir das einen etwaigen vorhandenen Subordner nicht.

PHP:
function deleteFilesFromDirectory($ordnername){
    if (is_dir($ordnername)) {
        if ($dh = opendir($ordnername)) {
            while (($file = readdir($dh)) !== false) {
                    if ($file!="." AND $file !="..") {
                    unlink("".$ordnername."".$file."");
                }
            }
        closedir($dh);
        rmdir($dh);
        }
    }
}

Muss ich da noch was extra machen, damit ein Unterordner gelöscht wird?

Grüsse
 
Du musst die gleiche Funktion auch auf die Unterordner anwenden, sprich rekursiv.

Folgendes habe ich mal schnell hingeschrieben, sollte funktionieren:
PHP:
function deleteContentsFromDir($dir, $rec=true, $break=true) {
  $handle = opendir($dir);
  if (!$handle) {
    return false;
  }

  while ($file=readdir($handle)) {
    if ($file == '.' || $file == '..') {
      continue;
    }
   
    $path = $dir . '/' . $file;

    if (is_dir($path) && $rec) {
      if (!deleteContentsFromDir($path, true, $break)) {
        return false;
      }
    }
    else if (is_file($path)) {
      if (!unlink($path) && $break) {
        return false;
      }
    }
  }
  rmdir($dir);
  return true;
}
 
Danke ComFreek.

Leider krieg ich anscheinend den Aufruf der Funktion nicht richtig hin.

Wenn ich die Funktion so Aufrufe:

PHP:
 $sql = ("SELECT name FROM modules WHERE id = ".$mod_id."");
     $res = mysql_query($sql);
     $row = mysql_fetch_assoc($res);
     $pfad = ("modules/mod_".$row['name']."");
     
     deleteContentsFromDir($pfad,$rec=true, $break=true);

kommt diese Warnung:

PHP:
Warning: opendir(modules/mod_archive,modules/mod_archive): Das System kann die angegebene Datei nicht finden. (code: 2) in C:\xampp\cms\admin\inc\modules.php on line 33

Lt. Google bedeutet das, dass der Pfad falsch ist. Ich habe daraufhin ein paar Variationen versucht, aber die Fehlermeldung bleibt dieselbe.

Woran könnte es sonst noch liegen?
 
Dazu gibts dochs chon viele fertige Funktionen, zB im Manual:

PHP:
<?php
/**
 * Recursively delete a directory
 *
 * @param string $dir Directory name
 * @param boolean $deleteRootToo Delete specified top-level directory as well
 */
function unlinkRecursive($dir, $deleteRootToo)
{
    if(!$dh = @opendir($dir))
    {
        return;
    }
    while (false !== ($obj = readdir($dh)))
    {
        if($obj == '.' || $obj == '..')
        {
            continue;
        }

        if (!@unlink($dir . '/' . $obj))
        {
            unlinkRecursive($dir.'/'.$obj, true);
        }
    }

    closedir($dh);
   
    if ($deleteRootToo)
    {
        @rmdir($dir);
    }
   
    return;
}
?>
 
Ich bin kein PHP Experte, aber was spricht gegen (sofern du nicht auf einer Windows Mühle unterwegs bist)

PHP:
<?php
    exec('rm -R /dein/ordner');
?>
 
@CPoly dazu benötigt man doch auch rechte auf exec oder?

@Alxy ich hab schon einiges aus dem Manual getestet, leider bleibt entweder der etwaig vorhandene Unterordner bestehen und somit auch der Hauptordner oder es kommt eben eine Fehlermeldung, die Ähnlich der obigen ist.
 
Ok dann kann ich die möglichkeit leider nicht verwenden.

Ich werd wohl noch mal etwas im Netz stöbern müssen.

Wenn ich mir mit var_dump bzw. print_r die einzelnen Funktionsaufrufe ausgeben lassen, kommt entweder null bzw. 0 raus.

Also is definitiv beim Pfad was faul.
 
Die von mir gepostete Funktion sollte gehen, mit dem zweiten paramter kannst du entscheiden, ob der Hauptordner auch gelöscht werden soll.
 
Anscheinend habe ich da ein Problem beim zusammensetzen des Pfades mit Mysql.

Wenn ich den Pfad direkt eingebe beim Aufruf, funktionierts.

Ganz komisch.

Ich werds weiter versuchen.
 

Neue Beiträge

Zurück