Получить отчет по файлам на PHP

Отчет по файлам в папке и всех вложенных

Пример результата:

Путь поиска файлов: /home/site/public_html/upload
Количество фалов: 102502
Вес всех файлов: 34.567 Gb
Средний размер файла: 353.618 Kb
Количество фалов свыше 100 Кб: 63386
Количество фалов свыше 200 Кб: 34627
Количество фалов свыше 300 Кб: 29470
Количество фалов свыше 500 Кб: 19815
Количество фалов свыше 1 Мб: 29

Скрипт:

<?php
// **************************************************
// Путь поиска файлов:
$pathSearch = __DIR__ . "/upload";
// **************************************************

function fnScanDir($dir, $desc = false) {
	$r = array();
	$dh = @opendir($dir);
	if ($dh) {
		while (($fname = readdir($dh)) !== false) {
			if ($fname == "." || $fname == "..") {
				continue;
			}
			$r[$fname] = $fname;
		}
		closedir($dh);
		if ($desc) {
			arsort($r);
		} else {
			asort($r);
		}
	}
	return array_keys($r);
}

function fnGetSize($path) {
	global $allSize, $maxSize, $countFiles, $countFilesBolee100Kb, $countFilesBolee200Kb, $countFilesBolee300Kb, $countFilesBolee500Kb, $countFilesBolee1Mb;
	
	$r = fnScanDir($path);
	
	foreach ($r as $f) {
		$nPath = "{$path}/{$f}";
		if (is_dir($nPath)) {
			fnGetSize($nPath);
			continue;
		}
		$fSize = filesize($nPath);
		$allSize = $allSize + $fSize;
		if ($maxSize < $fSize) {
			$maxSize = $fSize;
		}
		$countFiles++;
		
		if ($fSize >= 102400) {
			$countFilesBolee100Kb++;
		}
		if ($fSize >= 204800) {
			$countFilesBolee200Kb++;
		}
		if ($fSize >= 307200) {
			$countFilesBolee300Kb++;
		}
		if ($fSize >= 512000) {
			$countFilesBolee500Kb++;
		}
		if ($fSize >= 10485760) {
			$countFilesBolee1Mb++;
		}
	}
}

function fnGetSizeName($size) {
	if ($size > 1073741824) {
		return round($size / 1073741824, 3) . " Gb";
	} else if ($size > 10485760) {
		return round($size / 10485760, 3) . " Mb";
	} else if ($size > 1024) {
		return round($size / 1024, 3) . " Kb";
	} else {
		return $size . " b";
	}
}

$allSize = 0;
$maxSize = 0;
$countFiles = 0;
$countFilesBolee100Kb = 0;
$countFilesBolee200Kb = 0;
$countFilesBolee300Kb = 0;
$countFilesBolee500Kb = 0;
$countFilesBolee1Mb = 0;

print "Путь поиска файлов: {$pathSearch}\n";

fnGetSize($pathSearch);

if ($countFiles <= 0) {
	print "Не найдено ни одно файла";
	goto endScript;
}

$averageSize = round($allSize / $countFiles);

print "Количество фалов: " . $countFiles . "\n";
print "Вес всех файлов: " . fnGetSizeName($allSize) . "\n";
print "Средний размер файла: " . fnGetSizeName(round($allSize / $countFiles)) . "\n";
print "Количество фалов свыше 100 Кб: " . $countFilesBolee100Kb . "\n";
print "Количество фалов свыше 200 Кб: " . $countFilesBolee200Kb . "\n";
print "Количество фалов свыше 300 Кб: " . $countFilesBolee300Kb . "\n";
print "Количество фалов свыше 500 Кб: " . $countFilesBolee500Kb . "\n";
print "Количество фалов свыше 1 Мб: " . $countFilesBolee1Mb . "\n";

endScript: