definir la taille d'un dossier et de tous ces sous-dossiers

Mammouth du PHP | 843 Messages

25 juil. 2008, 12:22

Salut la compagnie :)

je suis en train de me fabriquer une classe de définition de la taille d'un dossier et de tous ce sous-dossiers...
J'ai fait ceci:
/**
* classe de definition de la taille d'un dossier et de touts ces sous-dossier
*
* @author Deschamps Sébastien <[email protected]>
* @copyright Deschamps Sébastien, all rights reserved.
* @version 1.0
* @name brts_size_this
* @package brts_pack
* @subpackage size_this
*/
// INSTANCE:                 $size_this = new brts_size_this();
// SIZE THIS:                $size = $size_this->get_size($src);
// RESET:                    $reset = $size_this->reset_size();
// DESTRUCTEUR               unset($size_this);
class brts_size_this
{
   /**
   * taille en octet de la source
   *
   * @access private
   * @staticvar string
   */
   private static $size;

   /**
   * definition des propriétés de la classe
   *
   * @name constructeur
   * @access public
   */
   public function __construct()
   {
      $this->size = 0;
   }

   /**
   * effacement des propriétés de la classe
   *
   * @name destructeur
   * @access public
   */
   public function __destruct()
   {
      unset($this->size);
   }

   /**
   * definition de la taille d'un dossier et de touts ces sous-dossier
   *
   * @name get_size
   * @access public
   * @param string $scr chemin vers le dossier
   */
   public function get_size($src)
   {
      // on ouvre le dossier
      $dir_handle = opendir($src);
      while(($o = readdir($dir_handle)) !== FALSE)
      {
         if(($o != '.') and ($o != '..'))
         {
            if(is_dir($src.'/'.$o))
            {
              $this->size=$this->size + $this->get_size($src.'/'.$o);
            }
            else $this->size=$this->size+filesize($src.'/'.$o);
         }
      }
      closedir($dir_handle);
      return $this->size;
   }

   /**
   * resmise à zero de size
   *
   * @name reset_size
   * @access public
   */
   public function reset_size($src)
   {
      // on remet à zero $this->size
      $this->size = 0;
   }
}
Mon soucis est que lors des test, je retourne une taille largement superieur à celle du dossier scané...

Si quelqu'un a une idée ?
Merci d'avance
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Mammouth du PHP | 959 Messages

25 juil. 2008, 12:41

J'ai tester sur un répertoire de quelques fichiers, il me dit 2167....Octets !

Après j'ai tester sur un gros répertoire de 2Gb, je crois qu'il se trompe en effet...

un petit test qui peut te donner une piste !
avant ta while, rajoute :
	  $nombre_rep = 0;
dans ta while :
	  $nombre_rep++;
et remplace
      return $this->size;
par
      return $this->size.'<br />'.$nombre_rep;
;)

EDIT : j'ai mis $nombre_rep, mais en fait c'est pas très juste comme nom :P...
Mais c'est pas très grave, c'est juste pour débugger ;)

Mammouth du PHP | 843 Messages

25 juil. 2008, 13:10

en faite j'ai fini par trouver ;)
j'ai juste fait en sorte de ne pas tenir compte de rajouter à $this->size dans le if car la variable est statique

tous fonctionne :)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non: