我正在构建一个文件浏览器,我需要知道目录是否有子项(但不是多少或类型)。
查找目录是否有子项的最有效方法是什么? glob()
? scandir()
它?查看税务记录?
修改
我觉得我被误解了,虽然我觉得我很清楚。我会尝试重述我的问题。
知道目录是否为空的最有效方法是什么?我基本上是在寻找一个布尔答案 - 不是EMPTY或EMPTY。
我不需要知道:
我做需要知道:
有效。
答案 0 :(得分:12)
我认为这非常有效:
function dir_contains_children($dir) {
$result = false;
if($dh = opendir($dir)) {
while(!$result && ($file = readdir($dh)) !== false) {
$result = $file !== "." && $file !== "..";
}
closedir($dh);
}
return $result;
}
一旦找到文件或目录(不包括.
和..
),它就会停止列出目录内容。
答案 1 :(得分:2)
您可以使用'find'一步列出所有空目录:
exec("find '$dir' -maxdepth 1 -empty -type d",$out,$ret);
print_r($out);
它不是“纯粹的”PHP,但它简单快速。
答案 2 :(得分:2)
这应该做到,简单,快速和有效。
<?php
function dir_is_empty($dir) {
$dirItems = count(scandir($dir));
if($dirItems > 2) return false;
else return true;
}
?>
答案 3 :(得分:2)
不幸的是,到目前为止,每种解决方案都缺乏必要的简洁和优雅,以超越其余部分。
所以,我自己被迫自制一个解决方案,我将会实施这个解决方案直到更好的方式出现:
if(count(glob($dir."/*")) {
echo "NOT EMPTY";
}
与原始问题的其他方法相比,仍然不确定这种方法的效率。
答案 4 :(得分:1)
我想扩展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;
}