【发布时间】:2011-11-09 10:09:16
【问题描述】:
我知道您可以使用 rmdir 删除一个空文件夹。而且我知道您可以使用以下三行清除文件夹。
foreach($directory_path as $file) {
unlink($file);
}
但是如果其中一个文件实际上是子目录怎么办。一个人将如何摆脱它,但像双镜效应一样无限量。 php中有强制删除目录吗?
谢谢
【问题讨论】:
我知道您可以使用 rmdir 删除一个空文件夹。而且我知道您可以使用以下三行清除文件夹。
foreach($directory_path as $file) {
unlink($file);
}
但是如果其中一个文件实际上是子目录怎么办。一个人将如何摆脱它,但像双镜效应一样无限量。 php中有强制删除目录吗?
谢谢
【问题讨论】:
来自 PHP rmdir 页面:
<?php
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);
}
}
?>
和
<?php
function delTree($dir) {
$files = glob( $dir . '*', GLOB_MARK );
foreach( $files as $file ){
if( substr( $file, -1 ) == '/' )
delTree( $file );
else
unlink( $file );
}
if (is_dir($dir)) rmdir( $dir );
}
?>
【讨论】:
<?php
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);
}
}
?>
来自 PHP 的文档
【讨论】:
这个函数会递归删除一个目录:
function rmdir_recursive($dir) {
foreach(scandir($dir) as $file) {
if ('.' === $file || '..' === $file) continue;
if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file");
else unlink("$dir/$file");
}
rmdir($dir);
}
这个也是:
function rmdir_recursive($dir) {
$it = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$it = new RecursiveIteratorIterator($it, RecursiveIteratorIterator::CHILD_FIRST);
foreach($it as $file) {
if ($file->isDir()) rmdir($file->getPathname());
else unlink($file->getPathname());
}
rmdir($dir);
}
【讨论】:
FilesystemIterator。