Class et récursivité [Résolu]

Signaler
Messages postés
63
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
18 juillet 2008
-
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonjour,
Quelqu'un peut m'expliquer pourquoi ma classe ne fonctionne pas? ("Connexion réinitialisée")
class Folder {
        private $sName;                     // nom du dossier
        private $iSize = 0;                 // taille en octets
        private $sPath = "";                // chemin
       
       
       
        //############################## accesseur ##########################################
        function getName() { return $this->sName;}
        // retourne la taille de tous les sous-répertoire et fichiers
        function getSize() {
            $racine=@opendir($this->sPath);
           
            while($dossier=@readdir($racine)){
                if(!in_array($dossier, Array("..", "."))){
                    if(is_dir("".$this->sPath."/$dossier")){
                        $this->iSize+=$this->getSize("".$this->sPath."/$dossier");
                    }else{
                        $this->iSize+=@filesize("".$this->sPath."/$dossier");
                    }
                }
            }
            @closedir($racine);
           
            return $this->unite($this->iSize, 2);
        }
       
    }

3 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30
salut

t'as une recursivite trop grosse, ca faut sauter la stack.

tu devrais virer tes @, et mettre une verification d'erreur, voir si tu n'as pas de dossiers qui contiendraient des liens recursifs, et ajouter des echo et fflush pour voir quels dossiers sont appelles.

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
Messages postés
260
Date d'inscription
jeudi 31 mai 2007
Statut
Membre
Dernière intervention
5 novembre 2010
1
Salut !

Je ne m'y connais pas vraiment niveau dossiers, mais si tu n'a pas de constructeur, ton dossier d'origine est "".
[mailto:$racine=@opendir($this->sPath $racine=@opendir($this->sPath]); => $racine=@opendir("");

Je dis peut-etre une co...rie, mais àa ne marcherais pas mieux avec private $sPath = "./"; d'origine ?  

<hr />
lowke<sub>yhttp://s11.bitefight.fr/c.php?uid=45971</sub>
Messages postés
63
Date d'inscription
jeudi 30 septembre 2004
Statut
Membre
Dernière intervention
18 juillet 2008

j'ai effectivement un constructeur qui voici :
//############################## constructeur ##########################################
        function __construct ( $sPath)
        {
            $this->sPath = $sPath;                                   // chemin du dossier
        }