problème de portabilité de variable

Eléphant du PHP | 100 Messages

31 oct. 2012, 23:59

Bonsoir,

j'ai un problème sur une portabilité de variable du moins je pense. Je vous expose mon problème voici mon code :

j’appelle une méthode comme ceci :

Code : Tout sélectionner

echo $filer->deplaceFile("bibu.txt", "toto/cv/test/bibu.txt");
Voici la méthode appeler :

Code : Tout sélectionner

public function deplaceFile($currentPath, $newPath) { $bool = true; $path=($this->informations($this->repertory('files'), $currentPath, $bool)); rename($path, $this->files."/".$newPath); }
et voici la méthode informations que j'utilise également

Code : Tout sélectionner

public function informations($arbo, $filename, $bool) { foreach ($arbo as $var) { if($var['type'] == 'file' && $var["name"] == $filename) { if($bool == true){ echo $var['full_path']; return ($var['full_path']); } else { echo $var['name']; echo $var['size']; echo $var['stat']['ctime']; } } elseif ($var['type'] == 'dir') { $this->informations($var['content'], $filename, $bool); /* bool à préciser*/ } } }
Le problème que je rencontre c'est que mon return $path me renvoie rien (c'est lui qui contient le chemin de mon fichier), pour infos j'écho la variable et elle contient bien les infos que je souhaitent.
Si je reprends ma méthode deplaceFile, mon $path est donc vide car je pense qu'il existe que dans ma méthode informations.
Cela fait un petit bout de temps que je cherche et je ne trouve malheureusement aucune solution à mon problème. Pourriez vous m'aider à le résoudre au plus vite ?
Merci d'avance.

Cordialement,

ViPHP
xTG
ViPHP | 7331 Messages

01 nov. 2012, 10:02

Tu as un souci de récursivité déjà dans ta fonction, si tu rappelles la fonction sans return tu perds le path.
public function informations($arbo, $filename, $bool)
   {
      foreach ($arbo as $var)
      {
         if($var['type'] == 'file' && $var["name"] == $filename)
         {
            if($bool == true){
               echo $var['full_path'];
               return ($var['full_path']);
            }
            else {
            echo $var['name'];
            echo $var['size'];
            echo $var['stat']['ctime'];
         }
            
         }
         elseif ($var['type'] == 'dir')
         {
            return $this->informations($var['content'], $filename, $bool); /* bool à préciser*/
         }
      }
  
De plus tu as un cas non géré qui aussi ne renvoie pas de valeur. Le cas où le fichier n'existe pas.

Eléphant du PHP | 100 Messages

01 nov. 2012, 12:10

Bonjour, et merci de votre réponse. Pour ce qui est du cas générer je le sais c'est juste que je suis en face de test pour le moment et le fichier que je demande existe.
Cependant, je ne comprends pas pourquoi placer un return là ou vous m'avez dit quand je le rajoute cela est pire il n'arrive même plus à trouver le chemin de mon fichier alors que si je l'enlève le chemin est bien dans $var["full_path].
Comment faire pour que ce chemin soit ma variable $path.
Ceci se passe ici dans ma méthode informations :

Code : Tout sélectionner

if($bool == true){ echo $var['full_path']; return ($var['full_path']); }
mon echo renvoie le bon chemin, mais le return ne me retourne rien ou alors je le récupère mal.

Cordialement,