仅删除 PHP 中的空文件夹和子文件夹

Remove only empty folders and subfolders in PHP

我有一个文件夹,里面既有空文件夹也有完整文件夹。

我想遍历所有这些,弄清楚它们是否,如果是,则删除它们。 我看到了一些适用的问题,但我无法找出完整的解决方案:

一定有一些简单可靠的方法可以做到这一点,使用新的 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

举个例子:

如果 $checkUpdatedTRUE 这样的结构将被完全删除:

- dir
   | - file.txt
   | - dir
        | - dir

结果:

- dir
   | - file.txt

如果它是默认的 FALSE,结果将是:

- dir
   | - file.txt
   | - dir  //See here this is still here

如果 $reportTRUE 你会得到这样的输出:

test/a - removed!
test/b - removed!
test/c - removed!

否则你没有输出