Funktion um FTP auszulesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Funktion um FTP auszulesen

    Schreib gerade ein Skript um ein kompletten FTP Server auszulesen.
    Leider bekomm ich für die Funktion eine Fehlermeldung also schon bevor das Skript geladen ist. Was ist daran Falsch? Darf ich die Funktion überhaupt innerhalb meines Haupskriptes schreiben?
    PHP-Code:
    <?php
    set_time_limit
    (120);
    if (
    $suche)
    {
    //---------------Funktionsbeginn------------------
        
    function rekursiv($nlist)
        {
            
    $nlist ftp_nlist($openftp_pwd($open));
            for(
    $i =0$i sizeof($nlist); $i++)
            {
                
    $verz ftp_pwd($open);
                
    fwrite($fx"<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."\n");
                
    $size ftp_size($open"nlist[$i]");
                if (
    $size == "-1")         // ist der returnwert von $size = "-1"? Wenn ja dann Verzeichnis. Wenn nicht eine Datei.
                
    {
                    
    ftp_chdir($open$nlist[$i])
                    
    rekursiv($nlist);  //[b]für die Zeile bekomm ich die Fehlermeldung!!![/b]
                
    }
            }
        }
    //--------------Funktionsende--------------------

    $dir opendir ("ftp\\ftps\\");
    while(
    $datei readdir($dir))
    ...
    ..
    .
    //Aufruf der Funktion weiter unten
    rekursiv($nlist);
    Darf ich die Funktion überhaupt von $nlist abhängig machen weil ich mir nicht sicher bin ob er mir dann in alle Verzeichnisse geht?
    Funktioniert das Skript so überhaupt? Hab noch nie ein Skript mit einer in sich selbst aufrufenden Funktion geschrieben?

    Noch was:
    Darf ich die variablen wie $benutzername usw so benutzen oder muss ich die im Hauptskript global setzen?

    Mfg Markus
    Zuletzt geändert von markusschmitt; 12.03.2003, 01:27.

  • #2
    $dir = opendir ("ftp\ftps\");

    du escapest das "

    Kommentar


    • #3
      $dir = opendir ("ftp\ftps\");

      du escapest das "


      Also eigentlich funktioniert das Einlese Skript meiner Daten zum Zugriff auf den FTP ohne murren.
      Wenn Jemand interresse haben sollte hier ist der Komplette Code:
      PHP-Code:
      <?php
      set_time_limit
      (120);
      if (
      $suche)
      {
      //---------------Funktionsbeginn------------------
          
      function rekursiv($ordner,$unterordner)
          {
              
      $nlist ftp_nlist($openftp_pwd($open));
              for(
      $i =0$i sizeof($nlist); $i++)
              {
                  
      $verz ftp_pwd($open);
                  
      fwrite($fx"<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."\n");
                  
      $size ftp_size($open"nlist[$i]");
                  if (
      $size == "-1")         // ist der returnwert von $size = "-1"? Wenn ja dann Verzeichnis. Wenn nicht eine Datei.
                  
      {
                      
      ftp_chdir($open$nlist[$i]);
                      
      $ordner ftp_pwd($open);
                        
      $unterordner ftp_nlist($openftp_pwd($open));
                      
      rekursiv($ordner,$unterordner);
                  }
              }
          }
      //--------------Funktionsende--------------------

          
      $dir opendir ("ftp\\ftps\\");
          while(
      $datei readdir($dir))
          {
              if(! 
      is_dir($datei))
              {
                  
      $ftp file("ftp\\\\ftps\\\\" $datei);
                  
      $servername trim($ftp[1]);     //Ersetz das mit dem Servernamen Bsp: exakt das: $servername = "home.arcor.de";
                  
      $benutzername trim($ftp[2]);     //Ersetz das mit deinem Benuzternamen zum Server: = "markus";
                  
      $passwort trim($ftp[3]);      //Ersetz das mit deinem Passwort: = "schmitt";
                  
      $port trim($ftp[4]);             //Ersetz das mit deinem Port. Standart ist 21 also: = "21";
                  
      echo "$servername $benutzername $port<BR>";
                  
      $open ftp_connect($servername$port);
                  global 
      $servername,$benutzername,$passwort,$port,$open;
                  if (! 
      $open)
                  {
                      echo 
      "Kann nicht verbinden <BR>";
                  }
                  else
                  {
                      echo 
      "Verbindung wird hergestellt 1 <BR>";
                      
      $logged ftp_login($open,$benutzername$passwort);
                      if (
      $logged)
                      {
                          echo 
      "Du konntest dich erfolgreich einloggen<BR>";
                          
      $wechsel4 chdir("suche");
                          
      $suchname $suche".txt";
                          
      touch($suchname);
                          
      $fx fopen ($suchname "a");
                          
      rekursiv($ordner,$unterordner); //[b] FTÜR DIESE ZEILE BEKOMM ICH JETZT NOCH EINEN PARSE ERROR!!![/b]
                          
      fclose(fx);
                          }
                      }
                      else
                      {
                          echo 
      "Du hast es nicht geschafft dich einzuloggen <BR>";
                      }
                  }
              }
          }
          
      closedir($dir);
      }
      ?>
      Mfg Markus
      Zuletzt geändert von markusschmitt; 12.03.2003, 12:17.

      Kommentar


      • #4
        Original geschrieben von markusschmitt
        $dir = opendir ("ftp\ftps\");

        du escapest das "


        Also eigentlich funktioniert das Einlese Skript meiner Daten zum Zugriff auf den FTP ohne murren.
        das beruht dann aber eher zufall als auf sauberer programierung.

        sieh dir deinen code im php-highlighting an, da siehst du's auch.


        richtig wäre:
        $dir = opendir ("ftp\ftps\\");
        also den backslash escapen statt dem anführungszeichen.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Ah sorry aber bei mir gibts immer irgenwie Probleme wenn ich aus Textpad rauskopier macht immer mist und Zeichen werde einfach gekillt. Komischerweise sind das meist immer die gleichen die weggelöscht werden.
          Bei mir stehen überall \\ zwei Stück davon da. Warum da ne Fehlermeldung für den Funktionsaufruf kommt weist du auch nicht oder?
          Was meinst du mit "php-highlighting" hab gehört das das ein Plugin für PHP ist. Was für ein Prog benutzt du zum PHP Programmieren. Ich progge eigentlich entweder mit meinem Textpad in welchem auch der Code entstanden ist oder mit Maguma.

          Mfg Markus
          Zuletzt geändert von markusschmitt; 12.03.2003, 13:12.

          Kommentar


          • #6
            php-highlighting is das, was du gemacht hast hier im forum...

            nimm mal den rekursiven aufruf raus und schau ob's dann geht (solltest ja zumindest die erste ebene geliefert bekommen)

            evtl. wäre auch die fehlermeldung interessant oder hab ich die überlesen?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Hab jetzt noch einiges am Code geändert da der so gar nicht funktionieren kann da $unterordner ein array ist und ich kein spezielles Element davon genommen hab also mach ich jetzt nur von $ordner abhängig.
              Hier ist der aktuelle Code
              PHP-Code:

              UPDATE

              <?php
              set_time_limit
              (120);
              if (
              $suche)
              {
              //---------------Funktionsbeginn------------------
                  
              function rekursiv($ordner$unterordner)
                  {
                      
              $nlist ftp_nlist($openftp_pwd($open));
                      for(
              $i =0$i sizeof($nlist); $i++)
                      {
                          
              $verz ftp_pwd($open);
                          
              fwrite($fx"<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."\n");
                          
              $size ftp_size($open"nlist[$i]");
                          if (@
              ftp_chdir($open"nlist[i]"))
                          {
                              
              $ordner ftp_pwd($open);
                                
              $unterordner $nlist[i];
                              
              rekursiv($ordnerunterordner);
                          }
                      }
                  }
              //--------------Funktionsende--------------------

                  
              $dir opendir ("ftp\\ftps\\");
                  while(
              $datei readdir($dir))
                  {
                      if(! 
              is_dir($datei))
                      {
                          
              $ftp file("ftp\\ftps\\" $datei);
                          
              $servername trim($ftp[1]);
                          
              $benutzername trim($ftp[2]);
                          
              $passwort trim($ftp[3]);
                          
              $port trim($ftp[4]);
                          echo 
              "$servername $benutzername $port<BR>";
                          
              $open ftp_connect($servername$port);
                          global 
              $servername,$benutzername,$passwort,$port,$open;
                          if (! 
              $open)
                          {
                              echo 
              "Kann nicht verbinden <BR>";
                          }
                          else
                          {
                              echo 
              "Verbindung wird hergestellt 1 <BR>";
                              
              $logged ftp_login($open,$benutzername$passwort);
                              if (
              $logged)
                              {
                                  echo 
              "Du konntest dich erfolgreich einloggen<BR>";
                                  
              $wechsel4 chdir("suche");
                                  
              $suchname $suche".txt";
                                  
              touch($suchname);
                                  
              $fx fopen ($suchname"a");
                                  
              rekursiv($ordner$unterordner);
                                  
              fclose(fx);
                                  } 
              // DIESE KLAMMER WAR ZUVIEL
                              
              }
                              else 
                              {
                                  echo 
              "Du hast es nicht geschafft dich einzuloggen <BR>";
                              }
                          }
                      }
                  }
                  
              closedir($dir);
              }
              ?>
              FEHLER GEFUNDEN DIE KLAMMER WARS

              Mfg Markus
              Zuletzt geändert von markusschmitt; 12.03.2003, 17:34.

              Kommentar


              • #8
                OK es war eine Klammer zuviel
                Bekomm jetzt mal meine Eingabe zu Gesicht. Wenn ich allerdings auf submit drücke komm das.

                Warning: Unable to find ftpbuf 0 in C:\apache\htdocs\ftp\index12.php on line 128

                Warning: Unable to find ftpbuf 0 in C:\apache\htdocs\ftp\index12.php on line 128

                Warning: Unable to find ftpbuf 0 in C:\apache\htdocs\ftp\index12.php on line 131

                Warning: Supplied argument is not a valid File-Handle resource in C:\apache\htdocs\ftp\index12.php on line 132

                Warning: Unable to find ftpbuf 0 in C:\apache\htdocs\ftp\index12.php on line 133

                Ich denk des sind die variablen die ich im Hauptcode hab. Wie übergebe ich die variablen an die funktion?
                Hab die Variablen im Hauptcode mal global gesetzt aber auch das hat nichts gebracht!!!
                Wer weiß rat!!!

                Mfg Markus

                Kommentar


                • #9
                  Kommando zurück $vergessen.

                  Mfg Markus
                  Zuletzt geändert von markusschmitt; 12.03.2003, 21:20.

                  Kommentar


                  • #10
                    if (@ftp_chdir($open, $nlist[$i]))

                    warum die anführungszeichen ?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Ob ich sie reinschreib oder nicht macht kein Unterschied aber ich hab noch ein anderes Problem und zwar ist das Ergebnis eine Endlosschleife und versteh nicht warum. Es gibt ein Haufen Zeilen in meiner Datei aber alle sind gleich.
                      <a href=ftp://michael:boxter@al-capone.de:21/E:/FTP Server/--==[Al-Capone]==-->ftp://michael:boxter@al-capone.de:21/E:/FTP Server/--==[Al-Capone]==--</a>
                      AL-Capone ist das erste Verzeichnis aber warum wechselt er nicht? Der Fehler muss in der Funktion liegen.

                      PHP-Code:
                      //---------------Funktionsbeginn------------------
                      function rekursiv($ordner$unterordner)    
                      {
                          global 
                      $servername,$benutzername,$passwort,$port,$open,$fx;
                          
                      $nlist ftp_nlist($openftp_pwd($open));
                          for(
                      $i =0$i sizeof($nlist); $i++)
                          {
                              
                      $verz ftp_pwd($open);
                              
                      fwrite($fx"<a href=ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]>ftp://$benutzername:$passwort@$servername:$port$verz/$nlist[$i]</a>"."\n");
                              if (@
                      ftp_chdir($open$nlist[i]))
                              {
                                  
                      $ordner ftp_pwd($open);
                                                    
                      $unterordner $nlist[i];
                                  
                      rekursiv($ordner$unterordner);
                              }
                          }

                      Woran könnts liegen

                      Mfg Markus

                      Kommentar


                      • #12
                        PHP-Code:
                         echo 'Versuch in folgendes Verzeichnis zu wechseln: '.$nlist[i];
                        if (@
                        ftp_chdir($open$nlist[i]))
                        {
                            echo 
                        'OK';
                            
                        $ordner ftp_pwd($open);
                            
                        $unterordner $nlist[i];
                            
                        rekursiv($ordner$unterordner);
                        }
                        else
                            echo 
                        'fehlgeschlagen.'
                        was gibt das aus?
                        Tipp: ändere das $nlist[i] mal in $nlist[$i], aber hier solltest du eigentlich so wie du's geschrieben hast ne fehlermeldung bekommen (parse error)...

                        btw: es macht doch einen unterschied.

                        - es is (für mich und ich dneke auch für andere hier) leichter zu lesen
                        - wenn du es in anführungszeichen setzt sagts du dem php-interpreter, dass hier ein string kommt, der geparst werden soll. er muss also alles zwischen den anführungszeichen nach variablen durchsuchen und dann deren wert ausgeben
                        - da isses imo schneller/besser/einfacher/... die anführungszeichen wegzulassen (willst ja ne variable ausgeben und keinen string)
                        EDIT:
                        wo benutzt du denn den parameter $ordner?
                        Zuletzt geändert von mrhappiness; 12.03.2003, 21:47.
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          OK habs geändert.
                          $ordner ist einfach nur der Pfad in dem es gerade ist. Je durchlauf geht durch if (@ftp_chdir($open, $nlist[$i])) man eins höher und der Pfad ändert sich. Und mit dem geänderten Pfad soll dei Funktion jetzt wieder durchlaufen und mit $nlist sind dann die Unterverzeichnisse.
                          Hab mal den aktuellen Code samt Ausgaben auf folgende Seite gesetzt. Dort stehen auch die Fehlermeldungen die ich bekomme sowie der Inhalt in der Textdatei.

                          http://home.arcor.de/stefanernst2/Unterlagen/skript.txt

                          Mfg Markus


                          Hab das Skript zum laufen gebracht.
                          Unter den Funktionsaufruf in der Funktion muss noch ftp_cdup($open); das war die Lösung.

                          Mfg Markus
                          Zuletzt geändert von markusschmitt; 13.03.2003, 01:37.

                          Kommentar

                          Lädt...
                          X