Class et récursivité

Résolu
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008 - 7 avril 2008 à 13:56
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 7 avril 2008 à 14:29
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

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
7 avril 2008 à 14:29
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
*/
3
cs_lowkey Messages postés 260 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 5 novembre 2010 1
7 avril 2008 à 14:16
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>
0
waterw72 Messages postés 63 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 18 juillet 2008
7 avril 2008 à 14:18
j'ai effectivement un constructeur qui voici :
//############################## constructeur ##########################################
        function __construct ( $sPath)
        {
            $this->sPath = $sPath;                                   // chemin du dossier
        }
0
Rejoignez-nous