我找到了一篇旧帖子,其中包含几乎完美的代码来解决我的问题:计算目录中的(许多)文件。它不包括 . en .. 条目,但不是其他目录。 我通过添加评论添加了一个问题,但没有得到回复。 (太旧的帖子,我想) ( Count how many files in directory php )
$fi = new FilesystemIterator(images, FilesystemIterator::SKIP_DOTS);
printf("There were %d Files", iterator_count($fi));
在 php.net 上搜索过,但是很多这个主题都没有记录。我确实找到了 SKIP_DOTS 事实,但没有找到关于如何排除目录的一封信。
现在我的代码生成:There were 76849 Files 但这也包括子目录。
如何更改此代码,以便排除我的子目录?
由于一些答案而更新
/**
PHP version problem, need update first
$files = new FilesystemIterator('images');
$filter= new CallbackFilterIterator($files, function($cur, $key, $iter) {
return $cur->isFile();
});
printf('There were %d Files', iterator_count($filter));
*/
$time0 = time();
$fi = new FilesystemIterator(images, FilesystemIterator::SKIP_DOTS);
$fileCount = 0;
foreach ($fi as $f) {
if ($f->isFile()) {
$fileCount++;
}
}
printf("xThere were %d Files", $fileCount);
$time1 = time();
echo'<br />tijd 1 = '.($time1 - $time0); // outcome 5
echo'<hr />';
$fi = new FilesystemIterator(images, FilesystemIterator::SKIP_DOTS);
printf("yThere were %d Files", iterator_count($fi));
$time2 = time();
echo'<br />tijd 2 = '.($time2 - $time1); // outcome: 0
我现在不能使用第一个答案,因为我必须更新我的 PHP 版本。 在测量时间时,第二个答案需要更多的时间来处理。
我还注意到,由于第二个答案,我自己的代码不计算子目录中的文件,它只计算子目录的数量,在我的例子中只有 4 个。 所以为了速度,我将使用我自己的代码和它的 sbstract 4。 下周我会尝试更新我的 php 版本,然后再试一次。
感谢大家的贡献!!!
最佳答案
使用 CallbackFilterIterators(自 5.4 起可用)很容易:
$files = new FilesystemIterator('images');
$filter= new CallbackFilterIterator($files, function($cur, $key, $iter) {
return $cur->isFile();
});
printf('There were %d Files', iterator_count($filter));
关于php - 计数目录中的文件,但不包括子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20444069/