Joh*_*ica 101
没有内置函数可以执行此操作,但请参阅http://us3.php.net/rmdir底部的注释.许多评论者发布了他们自己的递归目录删除功能.你可以从这些中挑选.
这是一个看起来像样的人:
function deleteDirectory($dir) {
if (!file_exists($dir)) {
return true;
}
if (!is_dir($dir)) {
return unlink($dir);
}
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') {
continue;
}
if (!deleteDirectory($dir . DIRECTORY_SEPARATOR . $item)) {
return false;
}
}
return rmdir($dir);
}
Run Code Online (Sandbox Code Playgroud)
编辑:rm -rf如果你想保持简单,你可以调用.这确实使您的脚本仅限UNIX,因此请注意这一点.如果你走那条路我会尝试类似的东西:
function deleteDirectory($dir) {
system('rm -rf ' . escapeshellarg($dir), $retval);
return $retval == 0; // UNIX commands return zero on success
}
Run Code Online (Sandbox Code Playgroud)
function rrmdir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != '.' && $object != '..')
{
if (filetype($dir.'/'.$object) == 'dir') {rrmdir($dir.'/'.$object);}
else {unlink($dir.'/'.$object);}
}
}
reset($objects);
rmdir($dir);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以随时尝试使用系统命令.
如果在linux上使用:rm -rf /dir
如果在Windows上使用:rd c:\dir /S /Q
在上面的帖子中(John Kugelman)我假设PHP解析器将在foreach中优化该scandir,但是我scandir在foreach条件语句中使用它似乎是错误的.
您也可以只执行两个array_shift命令来删除,.而..不是始终检查循环.
想不出比这更简单、更有效的方法来做到这一点
function removeDir($dirname) {
if (is_dir($dirname)) {
$dir = new RecursiveDirectoryIterator($dirname, RecursiveDirectoryIterator::SKIP_DOTS);
foreach (new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::CHILD_FIRST) as $object) {
if ($object->isFile()) {
unlink($object);
} elseif($object->isDir()) {
rmdir($object);
} else {
throw new Exception('Unknown object type: '. $object->getFileName());
}
}
rmdir($dirname); // Now remove myfolder
} else {
throw new Exception('This is not a directory');
}
}
removeDir('./myfolder');
Run Code Online (Sandbox Code Playgroud)
已经有很多解决方案,还有另一种可能性,使用 PHP 箭头函数使用更少的代码:
function rrmdir(string $directory): bool
{
array_map(fn (string $file) => is_dir($file) ? rrmdir($file) : unlink($file), glob($directory . '/' . '*'));
return rmdir($directory);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
64538 次 |
| 最近记录: |