Ankündigung

Einklappen
Keine Ankündigung bisher.

FTP Verbindung in function()

Einklappen

Neue Werbung 2019

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

  • FTP Verbindung in function()

    Hallo Zusammen,

    ich habe eine Funktion geschrieben, um zu prüfen ob neue Bilder an dem jeweiligen Tag hochgeladen wurden. Dazu wird eine Verbindung mithilfe von "ftp_connect" in der Funktion aufgebaut und am Ende der Funktion mit "ftp_close" wieder geschlossen.

    Leider gelingt es mir aber nicht diese Funktion mehrmals hintereinander aufzurufen, sodass die Verbindung sich immer ändert. Er versucht immer auf die erste Verbindung zu greifen:

    PHP-Code:
    <?php

    function checkfiles($user,$pass,$kunde,$ordner) {

        
    // FTP Verbindung herstellen
        
    $ftp_server "ftps.......de";
        
    $ftp_user   $user;
        
    $ftp_pass   $pass;
        
    $conn_id ftp_connect($ftp_server);
        if(!(
    $login_result ftp_login($conn_id$ftp_user$ftp_pass))) {ftp_close($conn_id); return;}
        
    // Schalte passiven Modus ein
        
    ftp_pasv($conn_idtrue);
        
    // verzeichniss wechseln
        
    ftp_chdir($conn_id$ordner);

        
    // Datum
        
    $time date("d.m.Y"time());
        
    $count 0;
        
    $filecount 0;
        
    $editfiles = array();


        
    // Zählt die Dateien im Ordner
        
    $handle opendir($ordner);
        while (
    $filepic readdir($handle))
          {if(
    $filepic != "." AND $filepic != ".."){$i++;}}
        
    closedir($handle);

        
    // Startet die Schleife
        
    $alledateien scandir($ordner);
        foreach (
    $alledateien as $datei) {
            
    $dateiname $dateiinfo['basename'];
            if (
    $datei != "." && $datei != ".."  && $datei != "_notes") {
            
    $pfad $ordner.$datei;
            
    $dateiinfo pathinfo($pfad);
            
    $filetime date ("d.m.Y",filemtime($pfad));
            
    array_push($editfiles,$pfad);
            
    $filecount++;
            }
        }

        if (
    $filecount 0) {    
            
    $text $editfiles_string;
            echo 
    "<br>$kunde | $text";
        }

        
    ftp_close($conn_id);

    }


    // 1.Test
    checkfiles("xxxxxxxxx","xxxxxxxxxx","Testordner1","images/");    // FTP User, FTP Pass, Kundenname, Ordner

    // 2.Test
    checkfiles("xxxxxxxxx","xxxxxxxxxx","Testordner2","img/");    // FTP User, FTP Pass, Kundenname, Ordner    

    ?>


    Was mache ich falsch?

  • #2
    Er versucht immer auf die erste Verbindung zu greifen:
    Was soll das heissen? Gibt das ne Fehlermeldung oder was sind die Symptome? Vielseitiger und übersichtlicher wäre eh wenn du die Verbindung als Parameter an die Funktion übergibst.
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      Und sinnvollere Variablennamen würden den Code lesbarer machen. Also eine Sprache verwenden und nicht hin und her wechseln. Und keine nichtssagenden Namen wie "text", "time" oder "datei" verwenden.

      Kommentar


      • #4
        Zitat von chorn Beitrag anzeigen

        Was soll das heissen? Gibt das ne Fehlermeldung oder was sind die Symptome? Vielseitiger und übersichtlicher wäre eh wenn du die Verbindung als Parameter an die Funktion übergibst.
        Wenn ich bei dem zweiten Aufruf den gleichen Ordner angebe wie bei dem ersten, dann gibt er mir die gleiche Dateien aus dem FTP raus. Sonst sagt er dass der Ordner nicht gefunden werden kann. Kann natürlich aber auch daran liegen, dass der Script in dem ersten FTP liegt und das z.B. "opendir" nicht auf den angegebenen FTP, sondern den Ordner zugreift, welcher ohnehin den gleichen Pfad hat wie der Script?

        Ist der Befehl
        PHP-Code:
        ftp_chdir($conn_id$ordner); 
        hier falsch eingesetzt?


        Zitat von hellbringer Beitrag anzeigen
        Und sinnvollere Variablennamen würden den Code lesbarer machen. Also eine Sprache verwenden und nicht hin und her wechseln. Und keine nichtssagenden Namen wie "text", "time" oder "datei" verwenden.
        Als ich den Code fast fertiggeschrieben habe, musste ich an den Tipp denken, weil du mir das schon mal in einem anderen Beitrag gesagt hast. Die Funktionsbezeichnungen werde ich wenns funzt nochmal durchgehen.

        Kommentar


        • #5
          Die Funktionsbezeichnungen werde ich wenns funzt nochmal durchgehen
          Das hilft aber den Helfern nicht, die deinen Code "funzend" machen sollen.
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Vielleicht so etwas in der Art

            PHP-Code:
            $now = new DateTimeImmutable();
            $check $now->sub(new DateInterval('P1D'));

            $ftp ftp_connect('ftp.example.com');
            ftp_login($ftp$userName$password);
            ftp_pasv($ftptrue);

            $entries ftp_mlsd($ftp$path);
            foreach(
            $entries as $entry) {
                if(
            $entry['type'] !== 'file') {
                    continue;
                }
                
            $modify = new DateTimeImmutable($entry);
                if(
            $modify $check) {
                    continue;
                }
                
            ftp_get($ftp$basename($entry['name']), $entry['name']);

            Kommentar


            • #7
              Blar muss leider sagen, dass meine Kenntnisse nicht soweit ausreichen um dein Vorschlag einzusetzen. Sobald ich versuche es in meinen Script einzubinden, erhalte ich die Meldung "Call to undefined function ftp_mlsd()"

              Kommentar


              • #8
                Dann hast Du keine aktuelle PHP 7 Version, denn das gibt es erst mit der 7er
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Das kann nicht sein, es ist die 7.71 (bei DomainFactory) eingestellt.

                  Ich habe das jetzt aber etwas anders gelöst und die ersten Schritte scheinen so zu funktionieren:

                  PHP-Code:
                  function checkfiles($ftp_server,$ftp_user_name,$ftp_user_pass,$ftp_dir){

                      
                  // Herstellen der Basis-Verbindung
                      
                  $conn_id ftp_connect($ftp_server); 

                      
                  // Einloggen mit Benutzername und Kennwort
                      
                  $login_result ftp_login($conn_id$ftp_user_name$ftp_user_pass); 

                      
                  // Verbindung überprüfen
                      
                  if ((!$conn_id) || (!$login_result)) { 
                              echo 
                  "Ftp-Verbindung nicht hergestellt!";
                              echo 
                  "Verbindung mit $ftp_server als Benutzer $ftp_user_name nicht möglich"
                              die; 
                          } else {
                              echo 
                  "<br><br>Verbunden mit $ftp_server als Benutzer $ftp_user_name<hr>";
                          }
                      
                  $files ftp_nlist ($conn_id$ftp_dir);
                      foreach (
                  $files as $list){
                          if (
                  $list != "." && $list != ".."  && $list != "_notes") {
                              echo 
                  "<br>$list";
                          }
                      }

                      
                  // Schließen des FTP-Streams
                      
                  ftp_quit($conn_id); 
                  }



                  checkfiles("ftps.XXXX.de","XXXXXX","XXXXX","/images");
                  checkfiles("ftps.XXXX.de","XXXXXX","XXXXX","/img"); 

                  Kommentar


                  • #10
                    Oh, dann hast Du eine Preview/Beta oder sogar Alpha-Version???
                    PHP gibt es bisher nur bis zur 7.3
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Zahlendreher. Er hat vermutlich eine 7.1.x und die ftp_mlsd() braucht >= 7.2

                      Kommentar


                      • #12
                        Mein Fehler, dachte das wäre schon ab 7.0 verfügbar...
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Zitat von jspit Beitrag anzeigen
                          Zahlendreher. Er hat vermutlich eine 7.1.x und die ftp_mlsd() braucht >= 7.2
                          Ja stimmt da hast du recht. Es ist kein Zahlendreher in dem Sinne, aber DF bezeichnet die 7.1 als 7-71 (frag nicht wieso).

                          Kommentar

                          Lädt...
                          X