Stavo facendo un paio di benchmark riguardo il calcolo delle dimensioni delle directory.
Al momento ho sperimentato due metodi.

Primo metodo: Ricorsione "semplice":

Codice PHP:
function DirSize_normal($dir) {
   
$dir=realpath($dir);
   @
$dh opendir($dir);
   
$size 0;
      
   while (
$file = @readdir($dh))
   {
      
$path $dir."/".$file;     
      if ( !
in_array($file, ['.''..'], true) && !is_link($path) ) 
      { 
         if (
is_dir($path) && is_readable($path))
            
$size += DirSize_normal($path); // recursive in sub-folders

         
elseif (is_file($path))
            
$size += filesize($path); // add file
      
}
   }
      @
closedir($dh);
      return 
$size;



Secondo metodo: RecursiveDirectoryIterator:

Codice PHP:
class ReadableFilter extends RecursiveFilterIterator {
   public function 
accept(){
      if ( 
$this->current()->isDir() && $this->current()->isReadable() )
         return 
true;
       else 
       if ( 
$this->current()->isFile() )    return true;    
   }
}

function 
DirSize_iterator($dir){
   
$tot_bytes 0;
   
$dir realpath($dir);
   
$objects = new RecursiveIteratorIterator(new ReadableFilter(new RecursiveDirectoryIterator($dir)));

   foreach(
$objects as $name => $object){
        if( 
in_array($name, ['.''..'], true) || is_link($name))
                    continue;
        if (
is_file($name)) $tot_bytes+=filesize($name);
    }

    return 
$tot_bytes;


Nei miei test sembra che il PRIMO metodo (DirSize_normal) sia un po' più veloce..

Volevo sapere cosa ne pensate.. avete altre idee di implementazione?
Spero sia un argomento utile e interessante