-
-
Save Grendel7/84f120fccd93b050621f7c7b47ee7666 to your computer and use it in GitHub Desktop.
<?php | |
set_time_limit(0); | |
$directory = new RecursiveDirectoryIterator('../'); | |
$counters = []; | |
foreach ($directory as $item) { | |
if (!is_dir($item)) { | |
continue; | |
} | |
$parts = explode('/', $item); | |
$basename = end($parts); | |
if (strpos($basename, '.') === 0) { | |
continue; | |
} | |
$itemIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($item)); | |
$counters[(string) $item] = iterator_count($itemIterator); | |
} | |
arsort($counters); | |
foreach ($counters as $path => $count) { | |
echo $path.': '.$count.'<br/>'.PHP_EOL; | |
} | |
echo "Total: ".array_sum($counters); |
There may be more efficient ways to do it, but you can get the total of all folders by adding this at the end:
echo "Total: ".array_sum($counters);
Many thanks for your feedback but I'm getting strange results that way:
../public_html: 173441
Total: 347313../www: 173441
Total: 347313../tmp: 201
Total: 347313../mail: 150
Total: 347313../ssl: 22
Total: 347313../logs: 17
Total: 347313../etc: 16
Total: 347313../ppdesign.cf: 9
Total: 347313../access-logs: 8
Total: 347313../public_ftp: 4
Total: 347313../wordpress-backups: 2
Total: 347313../lscache: 2
Total: 347313
This total is, in fact, the total of all of the above, including 2x 173441
Are public_html
and www
perhaps the same folder? linked with a symlink? I know cPanel does that, and it would explain the identical file count.
I suppose it would be possible to folder out symlinks somehow, perhaps by tweaking the FilesystemIterator::FOLLOW_SYMLINKS
flag on the RecursiveDirectoryIterator
.
Yep, that's right, it's a symlink in cPanel and I resolved my issue by simply dividing the total by 2 as I just wanted to receive the total only by email with a cron. Many thanks for your help!
Great!
How to adapt for returning only the grand total, without folder distribution?