删除包含文件的目录?
我想知道,删除包含所有文件的目录的最简单方法是什么?
我用于删除文件夹,但是,如果其中包含文件,我根本无法删除它。rmdir(PATH . '/' . $value);
我想知道,删除包含所有文件的目录的最简单方法是什么?
我用于删除文件夹,但是,如果其中包含文件,我根本无法删除它。rmdir(PATH . '/' . $value);
现在至少有两种选择。
在删除文件夹之前,请删除其所有文件和文件夹(这意味着递归!下面是一个示例:
public static function deleteDir($dirPath) {
if (! is_dir($dirPath)) {
throw new InvalidArgumentException("$dirPath must be a directory");
}
if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
$dirPath .= '/';
}
$files = glob($dirPath . '*', GLOB_MARK);
foreach ($files as $file) {
if (is_dir($file)) {
self::deleteDir($file);
} else {
unlink($file);
}
}
rmdir($dirPath);
}
如果您使用的是 5.2+,则可以使用递归迭代器来完成此操作,而无需自己实现递归:
$dir = 'samples' . DIRECTORY_SEPARATOR . 'sampledirtree';
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($it,
RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
if ($file->isDir()){
rmdir($file->getRealPath());
} else {
unlink($file->getRealPath());
}
}
rmdir($dir);
我通常使用它来删除文件夹中的所有文件:
array_map('unlink', glob("$dirname/*.*"));
然后你可以做
rmdir($dirname);