2012-10-19 133 views
0

我已经设置了一些PHP来删除一个目录,它的内容,以及任何子目录及其内容...我是PHP新手,所以我肯定是在做一些错误或者是错误的以最低效的方式做事。删除目录内容和子目录内容

寻找关于如何做到这一点更好......

顺便说一些参考或建议,该代码工作正常。使用PHP 5.3.8。

chmod($main_dir, 0755); 
if ($handle = opendir($main_dir)) { 
    while (false !== ($entry = readdir($handle))) { 
     $absolute_path = $main_dir.'/'.$entry; 
     if ($entry != "." && $entry != "..") {  
      chmod($absolute_path, 0755); 
      unlink($absolute_path); 

      //check if any folders exist, then delete files within 
      if (file_exists($absolute_path) && is_dir($absolute_path)) { 
       if ($child_handle = opendir($absolute_path)) { 
        while (false !== ($child_entry = readdir($child_handle))) {    
        $child_absolute_path = $absolute_path.'/'.$child_entry; 
         if ($child_entry != "." && $child_entry != "..") {    
          chmod($child_absolute_path, 0755); 
          unlink($child_absolute_path); 
         } 
        } 
        closedir($child_handle); 
       } 
      } 
      rmdir($absolute_path); 
     } 
    } 
    closedir($handle); 
} 
rmdir($main_dir); 

有什么想法?非常感激! 即时通讯使用PHP 5.3.8

+0

这可能是在[代码审查]更合适(http://codereview.stackexchange.com/?as=1) – noel

+0

@shakabra谢谢,现在要去看看...... – Terry

回答

4

您可以使用RecursiveDirectoryIterator列出所有文件和文件夹,然后删除它们。请注意,您必须使用RecursiveIteratorIterator::CHILD_FIRST,以便在文件夹之前删除文件。

$dir = __DIR__ . "/test"; 
$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS); 
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST); 
foreach ($ri as $file) { 
    $file->isDir() ? rmdir($file) : unlink($file); 
} 
+1

WOW,这么多更简单...谢谢!在php.net上做了一些阅读,希望我在RecursiveDirectoryIterator之前了解它。 – Terry

+0

@Terry学习是一个继续的事情...很高兴我能够帮助 – Baba