2016-07-20 4 views
0

ich zwei rekursive Scripts versucht haben, um den Inhalt des Ordners zu wischen:Seltsam php Verhalten rekursive Löschen des Ordners entfernt nur 527 Datei anstatt alle

Faust ein:

function clearDirectory($path) 
{ 
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(get_home_path().$path, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST); 
    foreach ($files as $filename => $fileInfo) { 
     if ($fileInfo->isDir()) { 
      rmdir($filename); 
     } else { 
      unlink($filename); 
     } 
    } 

} 

Zweite ein:

function rrdir($path) 
{ 
    $src = get_home_path() . $path; 
    $dir = opendir($src); 
    while(false !== ($file = readdir($dir))) { 
     if (($file != '.') && ($file != '..')) { 
      $full = $src . '/' . $file; 
      if (is_dir($full)) { 
       rrmdir($full); 
      } 
      else { 
       unlink($full); 
      } 
     } 
    } 
    closedir($dir); 
    rmdir($src); 
} 

In beiden Fällen macht es das gleiche. Aber ich finde seltsames Problem, dass es nicht alle Dateien entfernt, die es nur für 527 von 706 tut.

Wenn ich eines dieser Skripte zweimal durchführe entfernt es alle Dateien ... Aber tut dies nicht von der erstes Mal.

Hat nichts mit Linux oder einer anderen Berechtigung zu tun und alle Berechtigungen sind in Ordnung.

Es gibt keine Fehler in den Protokollen geschrieben alles funktioniert reibungslos mit diesen beiden Skripten das Problem ist, dass sie nicht alle Dateien vom ersten Mal löschen.

Ich bin Windows 10 x64, mit virtuellen Vagrant und Homestead-Box. Getestet rm -f * es funktioniert gut. Was mache ich falsch?

+1

Mögliche Duplikate von [Wie lösche ich rekursiv ein Verzeichnis und seinen gesamten Inhalt (Dateien + Unterverzeichnisse) in PHP?] (Http://stackoverflow.com/questions/3338123/how-do-i-recursively-delete -a-Verzeichnis-und-seine-gesamte-Inhalte-files-sub-dir) – wazelin

+1

Problem in der ersten, dass Sie versuchen, den Ordner mit 'rmdir()' zu löschen, aber es wird nur den Ordner löschen, wenn es leer ist also werden sie übersprungen, wenn nicht. – JustOnUnderMillions

+1

ist 'rrmdir' falscher Tippfehler? – JustOnUnderMillions

Antwort

0

Wie auch JustOnUnderMillions erwähnt, gibt es zwei Probleme:

  • clearDirectory ruft rmdir, die das Verzeichnis leer sein erfordert. Sie möchten wahrscheinlich die andere Funktion rrdir aufrufen.
  • Die Funktion rrdir ruft rrmdir auf, was nicht definiert ist. Wahrscheinlich möchten Sie hier rrdir anrufen.
+0

Man beide Skripte funktionieren gut. Sie löschen die Dateien, aber nicht alles, was sie zuerst löscht 527 und verlässt 179. Wenn ich es erneut ausführe, löscht es die restlichen. –

0

Ok Ich denke, ich habe festgestellt, dass das Problem nicht durch den Code verursacht wird. Das Problem wurde wahrscheinlich von der virtuellen Heimkiste verursacht, die ich als Entwicklungsumgebung nutze. Als ich XAMPP auf meiner Maschine installierte, funktionierte es wie ein Zauber. Danke Leute für den Versuch, es zu reparieren.