如果文件夹包含任何文件,rmdir()
函数将失败。我可以使用以下内容遍历目录中的所有文件:
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') continue;
unlink($dir.DIRECTORY_SEPARATOR.$item);
}
rmdir($dir);
有没有办法一次性删除所有内容?
答案 0 :(得分:61)
rrmdir()
- 递归删除目录:
function rrmdir($dir) {
foreach(glob($dir . '/*') as $file) {
if(is_dir($file)) rrmdir($file); else unlink($file);
} rmdir($dir);
}
答案 1 :(得分:47)
嗯,总是
system('/bin/rm -rf ' . escapeshellarg($dir));
如果有的话。
答案 2 :(得分: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);
}
}
答案 3 :(得分:2)
根据this来源;
节省一些时间,如果你想清理一个目录或删除它并且你在Windows上。
使用此:
chdir ($file_system_path);
exec ("del *.* /s /q");
您可以使用其他DEL语法或任何其他shell util。 您可能必须允许该服务与桌面交互,因为这是我当前的设置,我不会更改它来测试它。
否则你可以找到另一种方法here.
答案 4 :(得分:1)
试试这个:
exec('rm -rf '.$user_dir);
答案 5 :(得分: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 );
}
}
答案 6 :(得分: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);
}