我的文件夹结构中包含超过300.000个文件和文件夹。
当我遍历此结构以获取某种类型的所有文件时,这需要大约半秒才能完成:
$path = "/path/to/folder";
$folder = new RecursiveDirectoryIterator($path);
$iterator = new RecursiveIteratorIterator($folder);
$files = new RegexIterator($iterator, '/^.+\.jpg$/i', RecursiveRegexIterator::GET_MATCH);
但是获得生成的迭代器($ files)的长度大约需要十秒:
$n = iterator_count($files);
是否有更快的方法来获取迭代器中的项目数?也许在迭代期间?
这些也需要大约10秒钟:
1。 find(命令行)
find /path/to/folder -type f | wc -l
2。 scandir(PHP,source)
$intFileCount = countFilesInDirectory($path, array('jpg'));
echo $intFileCount;
function countFilesInDirectory($strPathToDirectory, $arrExtensions) {
$intFileCount = 0;
$arrFiles = scandir($strPathToDirectory);
foreach($arrFiles as $strFile) {
if('.' != $strFile && '..' != $strFile) {
if(is_dir("$strPathToDirectory/$strFile") && is_readable("$strPathToDirectory/$strFile")) {
$intFileCount += countFilesInDirectory("$strPathToDirectory/$strFile", $arrExtensions);
} else {
$arrFileInfo = pathinfo($strFile);
if(in_array($arrFileInfo['extension'], $arrExtensions)) {
$intFileCount += 1;
}
}
}
}
return $intFileCount;
}
注意:
我正在计算脑中的秒数。因此,方法之间可能会有一些细微的差别,但它并不大到与我相关。