如何快速查找目录中的文件数量?

时间:2011-06-02 07:27:40

标签: php

我的系统中的几个目录中有数千个日志文件。大多数情况下,我需要知道目录中这些文件的数量。我担心这种态度:

$files = count(scandir("logs")) - 2;

效果不是很好(内存,文件系统)。我正在考虑一些全局计数器(在添加文件后递增),除非有其他有效的方法吗?

5 个答案:

答案 0 :(得分:2)

尝试调用文件的系统列表:

$files = exec('ls logs | wc -l');

答案 1 :(得分:2)

$files = count(glob("logs/*",GLOB_NOSORT));

答案 2 :(得分:1)

也许使用opendir / readdir?

<?php
$i = 0;
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))
        if ($file != "." && $file != "..")
            ++$i;
    closedir($handle);
}
?>

答案 3 :(得分:1)

我也在考虑这个“一元计数器”解决方案:添加每个文件后,运行此命令

file_put_contents("counter_myDir","1",FILE_APPEND);

然后我会在每个目录中增加几个kB(只有几个目录,没关系)并且阅读似乎也非常有效和便携:

$files = filesize("counter_myDir");

您能否将此与此处建议的其他解决方案进行比较?我真的需要尽可能有效地了解文件的数量。

答案 4 :(得分:0)

这些是我扫描大约30个文件夹时的总计,每个文件夹有〜5000个文件。 除了缓存结果(以memcached或其他方式)以外,找不到比scandir更快的方法。

echo count(scandir('logs/'))-2; // 0.140 sec

echo system('find "logs/ | wc -l'); // 0.300 sec

echo system('ls -l logs/ | wc -l'); // 1.200 sec

echo count(glob('logs/*',GLOB_NOSORT)); // 1.800 sec