[PHP] Recursive list FTP files

Dieses Thema im Forum "Webentwicklung" wurde erstellt von badloader, 22. Oktober 2012 .

Schlagworte:
  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
     
  2. 22. Oktober 2012
    AW: Recursive list FTP files

    Und zwar?
     
  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.
  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.
  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
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.