【问题标题】:PHP: What is the best and easiest way to check if directory is empty or not [closed]PHP:检查目录是否为空的最佳和最简单的方法是什么[关闭]
【发布时间】:2023-04-03 11:58:02
【问题描述】:

我有一个根目录,其中包含 100 个动态生成的文件夹。随着时间的推移,这些文件夹中的一些将需要从系统中删除,条件是这个(ese)目录必须是空的。实现这一目标的最佳最短、最简单和/或最有效的方法是什么?

【问题讨论】:

  • rmdir 对于非空目录将失败,所以只需 $deleted = @rmdir('/path/to/folder');
  • 谢谢...按照@Matteo 和Jeffman 的建议采用glob 方式

标签: php directory removeall is-empty


【解决方案1】:

使用glob

if (count(glob("path/*")) === 0 ) { // empty

glob 的一个好处是它不会返回 ... 目录。

【讨论】:

  • 使用GLOB_NOSORT 标志来提高性能
  • 但是如果./..没有被报告,那么这样的目录不会被删除,因为它不是空的......所以它似乎不适合删除空目录
  • 这种错误方式,默认情况下 glob() 会忽略隐藏文件,php.net/manual/ru/function.glob.php#68869 因此,如果您在 glob() 中添加掩码以获取隐藏文件,您将得到与 @Matteo 相同的解决方案写在下面。
  • 考虑到编码方便,这是有效的。考虑到性能,如果 glob 首先需要为每个目录提供 +1000 个文件以检查,然后计数告诉有多少文件,这可能会很糟糕。
【解决方案2】:

您可以计算文件夹中包含的项目。前两项是...,所以只需检查项目数。

$files_in_directory = scandir('path/to');
$items_count = count($files_in_directory);
if ($items_count <= 2)
{
    $empty = true;
}
else {
    $empty = false;
}

【讨论】:

  • 这会比@jeffman 建议的glob 更快更有效吗?
  • 我对这两种解决方案进行了基准测试,实际上 Jeffman 的解决方案更快(在一个文件夹上)。杰夫曼:5.388E-5 seconds我的解决方案:2.909E-5 seconds
  • +1...进一步阐述。谢谢
猜你喜欢
  • 2013-12-03
  • 2013-02-18
  • 1970-01-01
  • 2018-11-14
  • 2020-12-08
  • 2020-01-17
  • 1970-01-01
  • 2017-09-15
  • 2011-05-30
相关资源
最近更新 更多