33

rmdir()如果文件夹包含任何文件,该函数将失败。我可以像这样遍历目录中的所有文件:

foreach (scandir($dir) as $item) {
    if ($item == '.' || $item == '..') continue;
    unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);

有什么办法可以一次性全部删除吗?

4

7 回答 7

62

rrmdir()-- 递归删除目录:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
于 2012-11-21T10:15:10.347 回答
47

嗯,总有

system('/bin/rm -rf ' . escapeshellarg($dir));

在可用的地方。

于 2009-08-18T21:42:26.503 回答
3
function delete_files($dir) {
  if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir") 
           delete_files($dir."/".$object); 
        else unlink   ($dir."/".$object);
      }
    }
    reset($objects);
    rmdir($dir);
  }
 }
于 2015-01-21T10:08:26.610 回答
2

根据这个来源;

节省一些时间,如果你想清理目录或删除它并且你在 Windows 上。

用这个:

    chdir ($file_system_path);
    exec ("del *.* /s /q");

您可以使用其他 DEL 语法或任何其他 shell 实用程序。您可能必须允许服务与桌面交互,因为这是我当前的设置,我不会更改它来测试它。

否则,您可以在此处找到替代方法

于 2009-08-18T21:51:33.957 回答
1

试试这个 :

exec('rm -rf '.$user_dir);
于 2013-01-02T11:22:35.680 回答
1

此功能删除目录和所有子目录和文件:

function DelDir($target) {
    if(is_dir($target)) {
        $files = glob( $target . '*', GLOB_MARK ); //GLOB_MARK adds a slash to directories returned

        foreach( $files as $file )
        {
            DelDir( $file );      
        }

        rmdir( $target );
    } elseif(is_file($target)) {
        unlink( $target );  
    }
}
于 2015-03-25T23:02:15.993 回答
0

lprent 的 php 注释中的一项安全且良好的功能 它可以防止意外删除当前目录中的符号链接目录的内容

public static function delTree($dir) { 
   $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
      (is_dir("$dir/$file") && !is_link($dir)) ? delTree("$dir/$file") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
  } 
于 2015-09-13T21:12:51.397 回答