使用PHP返回文件夹中的文件总数

时间:2008-10-22 03:40:51

标签: php file count directory

有没有更好/更简单的方法来查找目录中的图像数量并将它们输出到变量?

function dirCount($dir) {
  $x = 0;
  while (($file = readdir($dir)) !== false) {
    if (isImage($file)) {$x = $x + 1}
  }
  return $x;
}

这似乎有很长的路要走,有没有更简单的方法?

注意:如果文件是图像,则isImage()函数返回true。

10 个答案:

答案 0 :(得分:25)

查看DirectoryIterator的标准PHP库(又名SPL):

$dir = new DirectoryIterator('/path/to/dir');
foreach($dir as $file ){
  $x += (isImage($file)) ? 1 : 0;
}

(仅供参考,有一个名为iterator_count()的未记录函数,但我现在最好不要依赖它。而且你需要过滤出看不见的东西,比如。和..无论如何。)

答案 1 :(得分:14)

这将为您提供您的目录中的数量。我将离开关于只计算图像给你的部分,因为我即将falll aaasssllleeelppppppzzzzzzzzzzzzzzz。

iterator_count(new DirectoryIterator('path/to/dir/'));

答案 2 :(得分:5)

我是这样做的:

$files = scandir($dir);
$x = count($files);
echo $x;

但它也很重要。和..

答案 3 :(得分:4)

上述代码

$count = count(glob("*.{jpg,png,gif,bmp}"));

是你最好的,但{jpg,png,gif}位只有在你追加GLOB_BRACE标志时才有效:

$count = count(glob("*.{jpg,png,gif,bmp}", GLOB_BRACE));

答案 4 :(得分:3)

您可以使用glob ...

$count = 0;
foreach (glob("*.*") as $file) {
    if (isImage($file)) ++$count;
}

或者,我不确定这能满足您的需求,但您可以这样做:

$count = count(glob("*.{jpg,png,gif,bmp}"));

答案 5 :(得分:1)

您还可以使用SPL通过扩展抽象DirectoryIterator类来使用isImage函数过滤FilterIterator的内容。

class ImageIterator extends FilterIterator {

    public function __construct($path)
    {
        parent::__construct(new DirectoryIterator($path));
    }

    public function accept()
    {
        return isImage($this->getInnerIterator());
    }
}

然后,您可以使用iterator_count(或实现Countable接口并使用本机count函数)来确定图像数量。例如:

$images = new ImageIterator('/path/to/images');
printf('Found %d images!', iterator_count($images));

使用这种方法,根据您需要如何使用此代码,将isImage函数移动到ImageIterator类以使所有内容整齐地包含在一个位置可能更有意义。 / p>

答案 6 :(得分:1)

我使用以下内容来获取Laravel

中一个目录中所有类型文件的计数
   $dir = public_path('img/');
    $files = glob($dir . '*.*');

    if ( $files !== false )
    {
        $total_count = count( $files );
        return $totalCount;
    }
    else
    {
        return 0;
    }

答案 7 :(得分:0)

你的回答似乎就像你能得到它一样简单。在PHP或Perl中,我想不出更简单的方法。

如果你使用Linux,你可能能够使用涉及ls,wc和grep的system / exec命令,具体取决于isImage()的复杂程度。

无论如何,我认为你所拥有的就足够了。您只需编写一次该函数。

答案 8 :(得分:0)

我用它来返回目录中除ALL之外的所有文件的计数。和..

return count(glob("/path/to/file/[!\.]*"));

以下是a good list of glob filters用于文件匹配目的。

答案 9 :(得分:0)

$nfiles = glob("/path/to/file/[!\\.]*");

if ($nfiles !== FALSE){

    return count($nfiles);

} else {

    return 0;

}