仅删除 PHP 中的空文件夹和子文件夹
Remove only empty folders and subfolders in PHP
我有一个文件夹,里面既有空文件夹也有完整文件夹。
我想遍历所有这些,弄清楚它们是否空,如果是,则删除它们。
我看到了一些适用的问题,但我无法找出完整的解决方案:
- How can use PHP to check if a directory is empty?
- Finding empty folders recursively and delete them recursively
- PHP script to loop through all of the files in a directory?
一定有一些简单可靠的方法可以做到这一点,使用新的 PHP5 功能?
类似(充满错误的伪代码)
<?php
$dir = new DirectoryIterator('/userfiles/images/models/');
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
if(!(new \FilesystemIterator($fileinfo))->valid()) {
rmdir($fileinfo);
}
}
}
?>
这应该适合你:
这里我只是从具有 glob()
的特定路径获取所有目录(PHP 4 >= 4.3.0,PHP 5)。然后我遍历每个目录并检查它是否为空。
如果它是空的,我用rmdir()
删除它,否则我检查它是否有另一个目录并用新目录调用函数
<?php
function removeEmptyDirs($path, $checkUpdated = false, $report = false) {
$dirs = glob($path . "/*", GLOB_ONLYDIR);
foreach($dirs as $dir) {
$files = glob($dir . "/*");
$innerDirs = glob($dir . "/*", GLOB_ONLYDIR);
if(empty($files)) {
if(!rmdir($dir))
echo "Err: " . $dir . "<br />";
elseif($report)
echo $dir . " - removed!" . "<br />";
} elseif(!empty($innerDirs)) {
removeEmptyDirs($dir, $checkUpdated, $report);
if($checkUpdated)
removeEmptyDirs($path, $checkUpdated, $report);
}
}
}
?>
删除空目录
(PHP 4 >= 4.3.3, PHP 5)
removeEmptyDirs — Removes empty directory's
void removeEmptyDirs( string $path [, bool $checkUpdated = false [, bool $report = false ]] )
描述
The removeEmptyDirs() function goes through a directory and removes every empty directory
参数
path
The Path where it should remove empty directorys
checkUpdated
If it is set to TRUE it goes through each directory again if one directory got removed
report
If it is set to TRUE the function outputs which directory get's removed
Return 值
None
举个例子:
如果 $checkUpdated
是 TRUE
这样的结构将被完全删除:
- dir
| - file.txt
| - dir
| - dir
结果:
- dir
| - file.txt
如果它是默认的 FALSE
,结果将是:
- dir
| - file.txt
| - dir //See here this is still here
如果 $report
是 TRUE
你会得到这样的输出:
test/a - removed!
test/b - removed!
test/c - removed!
否则你没有输出
我有一个文件夹,里面既有空文件夹也有完整文件夹。
我想遍历所有这些,弄清楚它们是否空,如果是,则删除它们。 我看到了一些适用的问题,但我无法找出完整的解决方案:
- How can use PHP to check if a directory is empty?
- Finding empty folders recursively and delete them recursively
- PHP script to loop through all of the files in a directory?
一定有一些简单可靠的方法可以做到这一点,使用新的 PHP5 功能?
类似(充满错误的伪代码)
<?php
$dir = new DirectoryIterator('/userfiles/images/models/');
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
if(!(new \FilesystemIterator($fileinfo))->valid()) {
rmdir($fileinfo);
}
}
}
?>
这应该适合你:
这里我只是从具有 glob()
的特定路径获取所有目录(PHP 4 >= 4.3.0,PHP 5)。然后我遍历每个目录并检查它是否为空。
如果它是空的,我用rmdir()
删除它,否则我检查它是否有另一个目录并用新目录调用函数
<?php
function removeEmptyDirs($path, $checkUpdated = false, $report = false) {
$dirs = glob($path . "/*", GLOB_ONLYDIR);
foreach($dirs as $dir) {
$files = glob($dir . "/*");
$innerDirs = glob($dir . "/*", GLOB_ONLYDIR);
if(empty($files)) {
if(!rmdir($dir))
echo "Err: " . $dir . "<br />";
elseif($report)
echo $dir . " - removed!" . "<br />";
} elseif(!empty($innerDirs)) {
removeEmptyDirs($dir, $checkUpdated, $report);
if($checkUpdated)
removeEmptyDirs($path, $checkUpdated, $report);
}
}
}
?>
删除空目录
(PHP 4 >= 4.3.3, PHP 5)
removeEmptyDirs — Removes empty directory's
void removeEmptyDirs( string $path [, bool $checkUpdated = false [, bool $report = false ]] )
描述
The removeEmptyDirs() function goes through a directory and removes every empty directory
参数
path
The Path where it should remove empty directorys
checkUpdated
If it is set to TRUE it goes through each directory again if one directory got removed
report
If it is set to TRUE the function outputs which directory get's removed
Return 值
None
举个例子:
如果 $checkUpdated
是 TRUE
这样的结构将被完全删除:
- dir
| - file.txt
| - dir
| - dir
结果:
- dir
| - file.txt
如果它是默认的 FALSE
,结果将是:
- dir
| - file.txt
| - dir //See here this is still here
如果 $report
是 TRUE
你会得到这样的输出:
test/a - removed!
test/b - removed!
test/c - removed!
否则你没有输出