]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix recursion on rmdirr
authorThomas Müller <thomas.mueller@tmit.eu>
Mon, 23 Jun 2014 11:33:55 +0000 (13:33 +0200)
committerThomas Müller <thomas.mueller@tmit.eu>
Mon, 23 Jun 2014 11:54:27 +0000 (13:54 +0200)
lib/private/helper.php

index 243baa46948d24ae29afc687f727e5ebcbd1528f..206c20d9169ed96fe01fdb8628f448cfe68275d8 100644 (file)
@@ -405,15 +405,19 @@ class OC_Helper {
         */
        static function rmdirr($dir) {
                if (is_dir($dir)) {
-                       $files = scandir($dir);
-                       // FIXME: use flat array instead of recursion to avoid
-                       // too many levels
-                       foreach ($files as $file) {
-                               if ($file !== '' && $file !== "." && $file !== "..") {
-                                       self::rmdirr("$dir/$file");
+                       $files = new RecursiveIteratorIterator(
+                               new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
+                               RecursiveIteratorIterator::CHILD_FIRST
+                       );
+
+                       foreach ($files as $fileInfo) {
+                               /** @var FilesystemIterator $fileInfo */
+                               if ($fileInfo->isDir()) {
+                                       rmdir($fileInfo->getRealPath());
+                               } else {
+                                       unlink($fileInfo->getRealPath());
                                }
                        }
-                       rmdir($dir);
                } elseif (file_exists($dir)) {
                        unlink($dir);
                }