Hello,
Quand on programme une fonction récursive il y a quelquechose que l'on oublie facilement : qu'est ce qui doit changer entre l'appel original de ta fonction et l'appel récursif ?
Le problème de ton code c'est qu'il n'y a justement rien qui change. Imaginons que tu aies cette structure :
Code : Tout sélectionner
/var/www/tonsite/
/var/www/tonsite/unrepertoire/
/var/www/tonsite/unrepertoire/unfichier
/var/www/tonsite/unrepertoire/unautrerepertoire
/var/www/tonsite/unrepertoire/unautrerepertoire/unautrefichier
Et que tu appelles ta fonction en lui passant en paramètre initial '/var/www/tonsite/'. Que se passe t-il ?
Premier appel, ta fonction parcourt '/var/www/tonsite/' et y trouve
unrepertoire, l'affiche, et s'appelle elle-même en passant 'unrepertoire' comme paramètre.
Déjà, là, ça coince : le chemin passé en paramètre en deuxième appel n'a pas du tout la même tête que celui que tu as passé au début (qui fonctionne).
Cela peut quand même marcher à une condition : que le dossier courant (celui dans lequel php s'éxécute) soit également /var/www/tonsite/. Comme ça, en essayant d'ouvrir 'unrepertoire', ça passe encore, car ta fonction voit le chemin complet suivant :
/var/www/tonsite/unrepertoire. Et tout va encore bien jusque là.
C'est à l'appel suivant que ça coince : ta fonction va essayer d'ouvrir
/var/www/tonsite/unautrerepertoire. Et bien sûr ça ne passe pas vu que ça n'existe pas.
Voilà le problème. Tu l'aurais compris tout seul si tu avais affiché $name.'/'.$file au lieu de seulement $file
