-
-
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); |
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!
There may be more efficient ways to do it, but you can get the total of all folders by adding this at the end: