Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    39

    [get Directory Size] Massime performance ??

    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

  2. #2
    interessante l'argomento ma ora non ho tempo di seguirlo nei due metodi che hai proposto te. Ne propongo un terzo se vuoi:

    Codice PHP:

    $directory 
    __DIR__.'/tmp';

    $cmd "du -s -B1 $directory | awk -F' ' '{print $1}'";

    $bytes shell_exec($cmd);

    echo 
    "tot bytes of $directory$bytes"
    se l'app gira sotto linux, non hai problemi.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    39
    eh .. magari!
    Sul mio server "casalingo" non ci sarebbero problemi, purtroppo molti degli hosting a pagamento (ad es. Aruba) non permettono l'utilizzo di "shell_exec()" o simili... credo per una questione di sicurezza.

  4. #4
    Mannaggia a voi che non vi comprate i server :P

    vedi questo https://gist.github.com/eusonlito/5099936 . Il dubbio mio è che non so cosa succede se sono presenti file/folder che php non può leggere.
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.