Php 对目录中的文件和子文件夹进行计数
大家好,我需要一个脚本,可以计算所有文件,文件夹及其子文件夹等 因此,我尝试了两个脚本,但每个脚本都返回不同的值。例子: 脚本1:2376 脚本2:2178 以下是我的两个脚本:Php 对目录中的文件和子文件夹进行计数,php,directory,counting,Php,Directory,Counting,大家好,我需要一个脚本,可以计算所有文件,文件夹及其子文件夹等 因此,我尝试了两个脚本,但每个脚本都返回不同的值。例子: 脚本1:2376 脚本2:2178 以下是我的两个脚本: $source = 'folder'; $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach($files as $f
$source = 'folder';
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
foreach($files as $file) {
$result[] = $file.'<br />';
}
echo count($result).'<br />';
function listFolders($dir) {
if($dh = opendir($dir)) {
$files = Array();
$inner_files = Array();
while($file = readdir($dh)) {
if($file != "." && $file != "..") {
if(is_dir($dir . "/" . $file)) {
$inner_files = listFolders($dir . "/" . $file);
if(is_array($inner_files)) $files = array_merge($files, $inner_files);
} else {
array_push($files, $dir . "/" . $file);
}
}
}
closedir($dh);
return $files;
}
}
foreach (listFolders($source) as $key=>$file){
$result2[] = $file ."<br />";
}
echo count($result2);
$source='folder';
$files=new recursiveiterator(new recursivedirectoryinterator($source),recursiveiterator::SELF_FIRST);
foreach($files作为$file){
$result[]=$file.
;
}
回声计数($result)。“
”;
函数列表文件夹($dir){
如果($dh=opendir($dir)){
$files=Array();
$internal_files=Array();
而($file=readdir($dh)){
如果($file!=“&&&$file!=”){
if(is_dir($dir./“$file)){
$internal_files=列表文件夹($dir./“$file);
如果(is_array($inner_files))$files=array_merge($files,$inner_files);
}否则{
数组_push($files,$dir./“$file);
}
}
}
closedir($dh);
返回$files;
}
}
foreach(listFolders($source)作为$key=>$file){
$result2[]=$file.“
”;
}
回声计数($result2);
那么,如何计算包含7000-10000个文件和子文件夹的文件夹
致以最良好的祝愿,
乔治 如果您的第一个示例使用RecursiveIterator,那么您也在计算点目录。在第二个示例中,您将它们删掉 使用以下命令:
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
foreach($files as $file) {
$result[] = $file.'<br />';
}
$files=new recursive迭代器(new recursivedirectoryinterator($source,FilesystemIterator::SKIP_DOTS),recursiveiterator::CHILD_FIRST);
foreach($files作为$file){
$result[]=$file.
;
}
我得到了这样的信息:“致命错误:调用/home/gtsvetan/public_html/files.php第10行中未定义的方法SplFileInfo::isDot()”我的php版本是:5.2.17你不应该使用两年前已经过时的php版本。实际上,5.2分支中没有进行bug修复,甚至没有重要的安全修复。更新的代码,请查看。使用FileSystemEmitter::SKIP_DOTS常量代替isDot()方法,isDot()方法不是递归迭代器的有效方法。请修复此问题,错误是我的。。。但是当我尝试使用isDot()时,结果是一样的:第一个脚本->8133/第二个脚本->7422是的,这是不一致的,因为RecursiveIteratorIterator将只包含叶,而不包含父级和子级。您可以在recursiveiterator(新的recursivedirectoryinterator($source),FilesystemIterator::SKIP_)之后首先添加recursiveiterator::CHILD_;