PHP:删除文件夹(包括其内容)的最简单方法

发布于 2024-08-02 04:30:28 字数 264 浏览 12 评论 0原文

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

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

有什么方法可以一次性删除所有文件吗?

The rmdir() function fails if the folder contains any files. I can loop through all of the the files in the directory with something like this:

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

Is there any way to just delete it all at once?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

戴着白色围巾的女孩 2024-08-09 04:30:28

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

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}

rrmdir() -- recursively delete directories:

function rrmdir($dir) { 
  foreach(glob($dir . '/*') as $file) { 
    if(is_dir($file)) rrmdir($file); else unlink($file); 
  } rmdir($dir); 
}
小瓶盖 2024-08-09 04:30:28

嗯,总有

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

可用的地方。

Well, there's always

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

where available.

青衫儰鉨ミ守葔 2024-08-09 04:30:28
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);
  }
 }
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);
  }
 }
追我者格杀勿论 2024-08-09 04:30:28

根据来源;

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

使用此:

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

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

另外,您可以在此处找到替代方法。

As per this source;

Save some time, if you want to clean a directory or delete it and you're on windows.

Use This:

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

You can use other DEL syntax, or any other shell util.
You may have to allow the service to interact with the desktop, as that's my current setting and I'm not changing it to test this.

Else you could find an alternative method here.

深空失忆 2024-08-09 04:30:28

尝试这个 :

exec('rm -rf '.$user_dir);

Try this :

exec('rm -rf '.$user_dir);
歌入人心 2024-08-09 04:30:28

此函数删除目录及其所有子目录和文件:

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 );  
    }
}

This fuction delete the directory and all subdirectories and files:

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 );  
    }
}
梦中的蝴蝶 2024-08-09 04:30:28

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); 
  } 

One safe and good function located in php comments by lprent
It prevents accidentally deleting contents of symbolic links directories located in current directory

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); 
  } 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文