Recursive Datei Auflistung FTP

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Tiffany Dicks, 11. August 2015 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 11. August 2015
    Moin,

    ich hab mal wieder ein Problem, ich weiß nicht was ihr für Infos braucht um mir zu helfen ich gebe was ich kann. Wenn was fehlt einfach fragen.

    Also folgendes Problem.

    Ich arbeite mit FuelPHP einem Codeigniter Fork (glaub ich).

    Ich habe eine Funktion die alle (!) Dateien auf einem FTP Server anzeigt.

    Ich hab jetzt einen Controller in meiner App -> hier funktioniert die Auflistung
    Ich habe den Code in einen Task (Cronjob?) verschoben: Hier funktioniert die Auflistung nicht. Wieso auch immer.

    Die Funktion zur Auflistung:

    PHP:
    function  ftp_get_recursive_paths ( $conn $path $max_level  0 ){
        
    $files  = array();
        if(
    $max_level  0 ) return  $files ;
        if(
    $path  !==  '/'  &&  $path [ strlen ( $path ) -  1 ] !==  '/' $path  .=  '/' ;
        
    $files_list  = @ ftp_nlist ( $conn $path );
        
        foreach(
    $files_list  as  $f ){
            if(
    $f  !==  '.'  &&  $f  !==  '..'  &&  $f  !==  $path ){
                if(@
    ftp_chdir ( $conn $f )){
                    
    ftp_get_recursive_paths ( $conn $f $max_level - 1 );
                }else{
                    
    $files [] =  basename ( $f );
                }    
            }
        }
        
        return 
    $files ;
    }
    Controller Aufruf bringt das erwartete Ergebnis:

    Der ganze Code der Public Methode des Controllers der funktioniert lautet:

    PHP:
    public function  action_index ()
        {
            
            
    $server  Model_Server :: query ()-> where ( 'id' '=' 3 )-> get_one ();
            
    $connection  ftp_connect ( $server -> host $server -> port 30 );
            
    ftp_login ( $connection ,   $server -> username ,   $server -> password );
            
            
    $files  = array();
            
            
    $list  ftp_get_recursive_paths ( $connection '/' 1000 );
            
    $it  = new  RecursiveIteratorIterator (new  RecursiveArrayIterator ( $list ));
    foreach(
    $it  as  $v ) {
      echo 
    $v "<br />" ;
    }
        
           
    Debug :: dump ( ftp_get_recursive_paths ( $connection '/' 1000 ));
            return new 
    Response ();
           
        }
    Wenn ich nun den Task aufrufe geht ein ähnlicher Code nicht mehr.

    Der Code lautet:

    PHP:

        
    public static function  run ()
        {
            
            while(
    true )
            {
            
                
    $servers  = \ Model_Server :: query ()-> where ( 'active' '=' 1 )-> get ();
                foreach(
    $servers  as  $server )
                {
                    \
    Cli :: write ( $server -> host . ' loaded' );
                }
                foreach(
    $servers  as  $server )
                {
                    
                    \
    Cli :: write ( 'connecting ' . $server -> host . ':' . $server -> port );
                    
    $connection  = @ ftp_connect ( $server -> host $server -> port 30 );
                    if(!
    $connection )
                    {
                        \
    Cli :: write ( 'error' );
                        continue;
                    }
                    
                    \
    Cli :: write ( 'login try: ' . $server -> username );
                    if(!@
    ftp_login ( $connection ,   $server -> username ,   $server -> password ))
                    {
                        \
    Cli :: write ( 'error' );
                        continue;    
                    }
                    
                    
    $observers  = \ Model_Server_Observer :: query ()-> where ( 'server_id' '=' $server -> id )-> get ();
                    foreach(
    $observers  as  $observer )
                    {
                    
                        \
    Cli :: write ( 'looking for files @ ' . $observer -> dir );
                        
                        
    $list  ftp_get_recursive_paths ( $connection $observer -> dir 1000 );
                        
    $files  = new \ RecursiveIteratorIterator (new \ RecursiveArrayIterator ( $list ));
                        \
    Cli :: write ( "<pre>" . print_r ( $list true ). "</pre>" );
                        foreach(
    $files  as  $file ) {
                            \
    Cli :: write ( 'found file -> ' . $file );
                        }
                        
                    
                    }
                    
                }
                
                
            }
                       
        }
    zufällig ne idee woran das liegen könnte?
     
  2. 12. August 2015
    AW: Recursive Datei Auflistung FTP

    PHP:
    if(@ ftp_chdir ( $conn $f )){
        
    ftp_get_recursive_paths ( $conn $f $max_level - 1 ); 
    Du verwirfst das Ergebnis.
     
  3. 13. August 2015
    AW: Recursive Datei Auflistung FTP

    Erklärt glaube ich nicht wieso der Code im Controller funktioniert wie gewünscht im Task / Cronjob aber nicht. Oder doch?

    Augen im Kopf haben hilft ungemein. Eben nochmal den Code überflogen und gesehen das es nicht der gleiche ist.

    Danke für den Wink mit dem Zaunpfahl ...
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.