3

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

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

编辑

似乎我被误解了,尽管我认为我很清楚。我会尝试重申我的问题。

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

不需要知道:

  • 目录中有多少个文件
  • 文件是什么
  • 当它们被修改时
  • 等等

确实需要知道:

  • 目录中是否有任何文件

有效率的。

4

5 回答 5

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

一旦找到文件或目录(不包括.and ..),它就会停止列出目录内容。

于 2011-07-22T05:50:52.120 回答
2

这应该做到,简单,快速和有效。

<?php
function dir_is_empty($dir) {
  $dirItems = count(scandir($dir));
  if($dirItems > 2) return false;
  else return true;
}
?>
于 2011-07-22T06:38:30.783 回答
2

不幸的是,到目前为止,每个解决方案都缺乏超越其他解决方案所需的简洁和优雅。

所以,我被迫自己自制一个解决方案,我将一直实施,直到出现更好的东西:

if(count(glob($dir."/*")) { 
  echo "NOT EMPTY"; 
}

与其他方法相比,仍然不确定这种方法的效率,这是最初的问题。

于 2011-07-22T07:22:06.940 回答
2

您可以使用“查找”一步列出所有空目录:

exec("find '$dir' -maxdepth 1 -empty -type d",$out,$ret);
print_r($out);

它不是“纯”的 php,但它简单而快速。

于 2011-07-22T06:33:52.183 回答
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;
}
于 2014-04-30T01:02:22.790 回答