我正在构建一个文件浏览器,我需要知道一个目录是否有孩子(但不是有多少或什么类型)。
查找目录是否有子目录的最有效方法是什么?glob()
? scandir()
它?检查其税务记录?
编辑
似乎我被误解了,尽管我认为我很清楚。我会尝试重申我的问题。
知道目录是否为空的最有效方法是什么?我基本上是在寻找一个布尔答案——不是空的或空的。
我不需要知道:
- 目录中有多少个文件
- 文件是什么
- 当它们被修改时
- 等等
我确实需要知道:
- 目录中是否有任何文件
有效率的。
我认为这是非常有效的:
function dir_contains_children($dir) {
$result = false;
if($dh = opendir($dir)) {
while(!$result && ($file = readdir($dh)) !== false) {
$result = $file !== "." && $file !== "..";
}
closedir($dh);
}
return $result;
}
一旦找到文件或目录(不包括.
and ..
),它就会停止列出目录内容。
这应该做到,简单,快速和有效。
<?php
function dir_is_empty($dir) {
$dirItems = count(scandir($dir));
if($dirItems > 2) return false;
else return true;
}
?>
不幸的是,到目前为止,每个解决方案都缺乏超越其他解决方案所需的简洁和优雅。
所以,我被迫自己自制一个解决方案,我将一直实施,直到出现更好的东西:
if(count(glob($dir."/*")) {
echo "NOT EMPTY";
}
与其他方法相比,仍然不确定这种方法的效率,这是最初的问题。
您可以使用“查找”一步列出所有空目录:
exec("find '$dir' -maxdepth 1 -empty -type d",$out,$ret);
print_r($out);
它不是“纯”的 php,但它简单而快速。
我想扩展vstm的答案-仅检查子目录(而不是文件):
/**
* Check if directory contains child directories.
*/
function dir_contains_children_dirs($dir) {
$result = false;
if($dh = opendir($dir)) {
while (!$result && ($file = readdir($dh))) {
$result = $file !== "." && $file !== ".." && is_dir($dir.'/'.$file);
}
closedir($dh);
}
return $result;
}