我的系统中的几个目录中有数千个日志文件。大多数情况下,我需要知道目录中这些文件的数量。我担心这种态度:
$files = count(scandir("logs")) - 2;
效果不是很好(内存,文件系统)。我正在考虑一些全局计数器(在添加文件后递增),除非有其他有效的方法吗?
答案 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