PHP - 查找目录是否有子项的最快方法?

时间:2011-07-22 05:29:02

标签: php children dir

我正在构建一个文件浏览器,我需要知道目录是否有子项(但不是多少或类型)。

查找目录是否有子项的最有效方法是什么? glob()scandir()它?查看税务记录?

修改

我觉得我被误解了,虽然我觉得我很清楚。我会尝试重述我的问题。

知道目录是否为空的最有效方法是什么?我基本上是在寻找一个布尔答案 - 不是EMPTY或EMPTY。

需要知道:

  • 目录中有多少个文件
  • 文件是什么
  • 修改时

需要知道:

  • 目录中是否包含任何文件

有效。

5 个答案:

答案 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;
}