#1 22. Oktober 2012 Zuletzt bearbeitet: 22. Oktober 2012 Recursive list FTP files Das ist mein Code: PHP: public function is_dir ( $directory ) { if (@ ftp_chdir ( $this -> _stream , $directory )) { // now go back @ ftp_chdir ( $this -> _stream , '..' ); return true ; // it's not an directory } else { return false ; } } public function recursive_ls ( $path , $maxdepth = 10 , $currentdepth = 0 ) { // list files $contents = $this -> ls ( $path ); foreach( $contents as $currentFile ) { // assuming it's a folder if there's no dot in the name if ( strpos ( $currentFile , '.' ) === false && $this -> is_dir ( $currentFile ) && $currentdepth < $maxdepth ) { // we call the function recursively $contents [] = $this -> recursive_ls ( $currentFile , $maxdepth , $currentdepth ++); } } return $contents ; } Aufruf: PHP: public function run () { // get server files $this -> _server_files = $this -> recursive_ls ( '/' , 1 ); die( print_r ( $this -> _server_files )); } Ergebnis soll sein: Code: Array ( [0] => /dir [1] => /file.txt [2] => /file1.txt [3] => /dir2 [4] => Array ( [0] => /dir/index.php [1] => /dir/license.txt [2] => /dir/liesmich.html [3] => /dir/readme.html ) [5] => Array ( [0] => /dir2/main.html [1] => /dir2/info.txt [2] => /dir3 ) ) Aktuell ist das Ergebnis aber ein anderes. Das liegt irgendwie an $depth, aber ich checke gerade einfach nicht wieso + Multi-Zitat Zitieren
#3 22. Oktober 2012 AW: Recursive list FTP files Es sollte nicht PHP: $contents [] = $this -> recursive_ls ( $currentFile , $maxdepth , $currentdepth ++); sondern PHP: $contents [] = $this -> recursive_ls ( $currentFile , $maxdepth , 1 + $currentdepth ); sein, da Du ja innerhalb der Stammfunktion noch nicht eine Ebene tiefer bist. Dein anderer Fehler liegt wie gesagt schon bei der Tiefe, denn wenn die entspr. Tiefe erreicht wird, bricht deine Rekursion nicht ab. Mit der maximal zu erreichenden Tiefe fängst Du rein garnichts an. 1 Person gefällt das. + Multi-Zitat Zitieren
#4 22. Oktober 2012 Zuletzt bearbeitet: 22. Oktober 2012 AW: Recursive list FTP files Ja, $foo++ statt ++$foo hat mir (und dem Stack ^^) auch schon einige male den Tag versaut. Vereinfacht gesagt: $foo++ hat bei einer Rekursion keinen Effekt, da die Variable erst erhöht wird wenn die Funktion zum Ende kam, was hier ja nicht der Fall ist (das hat ein rekursiver Aufruf einer Funktion so an sich ). 1 Person gefällt das. + Multi-Zitat Zitieren
#5 23. Oktober 2012 Zuletzt bearbeitet: 23. Oktober 2012 AW: Recursive list FTP files So true. Danke für eure Hilfe. Immer wieder das gleiche. Aber terraNova: Die maxdepth erreicht genau das, was ich mir vorgestellt habe. PS: function is_dir ist nicht nötig an dieser stelle + Multi-Zitat Zitieren