【发布时间】:2018-11-14 07:51:59
【问题描述】:
在 Stack Overflow 上,关于如何检查目录是否为空的问题有几个答案,但哪种方法最快,哪种方法最有效?
答案 1: https://stackoverflow.com/a/7497848/4437206
function dir_is_empty($dir) {
$handle = opendir($handle);
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
closedir($handle); // <= I added this
return FALSE;
}
}
closedir($handle); // <= I added this
return TRUE;
}
答案 2: https://stackoverflow.com/a/18856880/4437206
$isDirEmpty = !(new \FilesystemIterator($dir))->valid();
答案 3: https://stackoverflow.com/a/19243116/4437206
$dir = 'directory'; // dir path assign here
echo (count(glob("$dir/*")) === 0) ? 'Empty' : 'Not empty';
或者,有什么完全不同的方式比上面这三种方式更快更有效?
至于答案1,请注意我添加了closedir($handle);,但我不确定是否有必要(?)。
编辑:最初我添加了closedir($dir); 而不是closedir($handle);,但我更正了@duskwuff 在他的answer 中所述。
【问题讨论】:
-
谁在乎?可读性更为重要。
-
你运行基准测试了吗?
-
@arkascha 我在乎。
-
@Jhecht 这在概念上类似于
glob()解决方案,并且在大型目录上也表现不佳。 -
@smith Noooo。启动一个新进程更多更加“昂贵”,而且我想不出任何一个命令可以以非破坏性方式完成这项工作。