kostenloser Webspace werbefrei: lima-city


mit php ftp verbinden und datei downloaden

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    daniel

    daniel hat kostenlosen Webspace.

    Hi zusammen,

    ich habe folgendes Problem.... ich möchte eine Verbindung via php FTP zu einem FTP-Server aufbauen, das funktioniert auch, jedoch kann der die Datei nicht downloaden... bekomme folgende Fehlermeldung:


    Verbunden zu ftp-outgoing2.dwd.de mit Benutzername username
     es wurde ein problem festgestellt....



    Könnt Ihr mir vll. sagen wo ichn fehler habe??


    <?php
    
    $local_file = '/html/xyz/abcd/wd/wetter.txt';
    $server_file = '/gds/specials/observations/tables/germany/SXDL99_DWAV_20151213_0744';
    $ftp_server="ftp-outgoing2.dwd.de";
    $ftp_user_name="username";
    $ftp_user_pass="password";
    
    
    //echo "ftp://".$ftp_user_name.":".$ftp_user_pass."@".$ftp_server.$server_file."<br><br>";
    
    // Verbindung aufbauen
    $conn_id = ftp_connect($ftp_server);
    
    // Login mit Benutzername und Passwort
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    
    
    // Verbindung überprüfen
    if ((!$conn_id) || (!$login_result)) {
        echo "FTP-Verbindung ist fehlgeschlagen!\n";
        echo "Verbindungsaufbau zu $ftp_server mit Benutzername $ftp_user_name versucht.\n";
        exit;
    } else {
        echo "Verbunden zu $ftp_server mit Benutzername $ftp_user_name \n";
    }
    
    
    // Download $server_file und speichern in $local_file
    if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
        echo "gespeichert in $local_file\n";
    }
    else {
        echo "\n es wurde ein problem festgestellt....\n";
    }
    
    
    // Verbindung schließen
    ftp_close($conn_id);
    ?>

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hat PHP die Schreibrechte in dem entsprechenden Verzeichnis? (Gerade bei all-inkl.com muss man darauf achten)

    Und wahrscheinlich ist das / am Anfang bei den Pfadangaben zuviel.

    Bei $local_file musst du mit den Pfadangaben von aufrufenden Datei ausgehen.
    rufst du diese Datei direkt auf, dann von dieser Datei, includierst du diese Datei, dann von der Datei, wo du dieses Script includierst.

    Bei $server_file von dem Punkt an, wo du auf dem FTP-Server landest.
    Bei einem Hauptaccount landest du meistens in /
    Hast du einen FTP-Account erstellt, dann ist der Punkt von dem Ordner, der beim Anlegen erstellt wurde. Kann also bereits html/ sein.
  4. matthias-detsch

    Kostenloser Webspace von matthias-detsch

    matthias-detsch hat kostenlosen Webspace.

    Es ist nur eine Vermutung, aber eventuell musst du noch auf passiv umstellen.
    Als ich neulich mal von meinem Server was auf einen anderen FTP-Server schaufeln wollte, lag es auch daran, dass es erst nicht funktionierte.
  5. Autor dieses Themas

    daniel

    daniel hat kostenlosen Webspace.

    Hey Jungs,

    danke für die Antworten.

    habe den Pfad ein wenig angepasst und passiv hinzugefügt
    $local_file = 'wd/wetter.txt';
    $server_file = 'gds/specials/observations/tables/germany/SXDL99_DWAV_20151213_0744';
    
    
    ftp_pasv($conn_id, true);


    Setzt speichert er es "teilweise", wenn ich die Datei wetter.txt manuel erstelle und dann das Script ausführe speichert er diese, jedoch ist sie beim zweiten aufruf weg und er zeigt folgende Fehlermeldung an..

    Warning: ftp_get(): php_connect_nonb() failed: Operation now in progress (115) in /home/webpages/lima-city/daniel/html/api/wetter/datenlesen.php on line 114
    
    Warning: ftp_get(): Type set to I in /home/webpages/lima-city/daniel/html/api/wetter/datenlesen.php on line 114
    es wurde ein problem festgestellt....


    Line 114 ist:
    if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {

  6. Ist binary nicht für Bilder?

    ftp_pasv($conn_id, true);
    Hast du auch tatsächlich nach dem Login im Code?

    Und dann kann es möglich sein, dass der FTP-Server, auf den du zugreifst, hinter einer NAT-Firewall steckt. Und hier hat PHP dann ein kleines Problem. Siehe http://www.elitehosts.com/blog/php-ftp-passive-ftp-server-behind-nat-nightmare/
  7. Autor dieses Themas

    daniel

    daniel hat kostenlosen Webspace.

    Der Code sieht jetzt wie folgt aus:

    $conn_id = ftp_connect($ftp_server);
    
    // Login mit Benutzername und Passwort
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    
    ftp_pasv($conn_id, true);
    
    // Verbindung überprüfen
    if ((!$conn_id) || (!$login_result)) {
        echo "FTP-Verbindung ist fehlgeschlagen!\n";
        echo "Verbindungsaufbau zu $ftp_server mit Benutzername $ftp_user_name versucht.\n";
        exit;
    } else {
        echo "Verbunden zu $ftp_server mit Benutzername $ftp_user_name \n";
    }
    
    
    // Download $server_file und speichern in $local_file
    if (ftp_get($conn_id, $local_file, $server_file, FTP_ASCII)) {
        echo "gespeichert in $local_file\n";
    }
    else {
        echo "\n es wurde ein problem festgestellt....\n";
    }
    
    
    // Verbindung schließen
    ftp_close($conn_id);


    Er speicht es auch. Mal ja dann wieder nicht, jenachdem ob die Datei wetter.txt vorhanden ist..

    Wollte es eigentlich so umgehen, so das die Datei immer vorhanden ist:

    if (file_exists($local_file)) {
        echo "Die Datei $local_file existiert<br>";
    } else {
        echo "Die Datei $local_file existiert nicht<br>";
    
    $fp = fopen($local_file,"a+");
    fputs($fp,$text);
    fclose($fp);  
    }


    Aber das funktioniert nicht wirklich, die Prüfung funktioniert, aber ich habe das Gefühl, das obwohl der Code vor der FTP-Verbdinung steht, er mit der FTP-Verbindung anfängt.

    Beitrag zuletzt geändert: 13.12.2015 14:34:07 von daniel
  8. Du rufst nun die FTP-Verbindung auf, wenn die Datei nicht existiert. Wolltest du das nicht anders herum?

    Du kannst ja auch die Datei vorher mit PHP anlegen.
  9. Autor dieses Themas

    daniel

    daniel hat kostenlosen Webspace.

    Also die Datei wird auch vorher erstellt, habe nur die Reihenfolge hier nicht drinne.

    Es wird erst geprüft ob Datei vorhanden, wenn ja, nichts machen. Wenn nein, Datei erstellen.
    Dann wird erst die FTP-Verbindung aufgebaut und Daten übertragen.

    Ich beobachte das jetzt mal und sollte die Meldung noch mal kommen, werde ich sie hier posten. ;)



    $local_file = 'wd/wetter.txt';
    $server_file = 'gds/specials/observations/tables/germany/SXDL99_DWAV_20151213_0744';
    $ftp_server="ftp-outgoing2.dwd.de";
    $ftp_user_name="USERNAME";
    $ftp_user_pass="PASSWORT";
    
    $ftp_serverver = 'gds/specials/observations/tables/germany/';
    
     // prüfen ob datei $local_file vorhanden ist und ggf erstellen
    if (file_exists($local_file)) {
        echo "Die Datei $local_file existiert\n\n";
    } else {
        echo "Die Datei $local_file existiert nicht\n\n";
    $text = "dateiinhalt";
    $fp = fopen($local_file,"a+");
    fputs($fp,$text);
    fclose($fp);  
    }
    
    //echo "ftp://".$ftp_user_name.":".$ftp_user_pass."@".$ftp_server.$server_file."<br><br>";
    
    // Verbindung aufbauen
    $conn_id = ftp_connect($ftp_server);
    
    // Login mit Benutzername und Passwort
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    
    ftp_pasv($conn_id, true);
    
    // Verbindung überprüfen
    if ((!$conn_id) || (!$login_result)) {
        echo "FTP-Verbindung ist fehlgeschlagen!\n";
        echo "Verbindungsaufbau zu $ftp_server mit Benutzername $ftp_user_name versucht.\n";
        exit;
    } else {
        echo "Verbunden zu $ftp_server mit Benutzername $ftp_user_name \n";
    }
    
    
    // Download $server_file und speichern in $local_file
    if (ftp_get($conn_id, $local_file, $server_file, FTP_ASCII)) {
        echo "gespeichert in $local_file\n";
    }   
    else {
        echo "\n es wurde ein problem festgestellt....\n";
    }
    
    
    
    //Inhalt des aktuellen Verzeichnis auslesen
    $contents = ftp_nlist($conn_id, $ftp_serverver);
    
    // Ausgabe von $contents
    //var_dump($contents);
    
    
    // Verbindung schließen
     ftp_close($conn_id);




    Und da haben wir auch schon die Fehlermeldung:

    Die Datei wd/wetter.txt existiert Verbunden zu ftp-outgoing2.dwd.de mit Benutzername USERNAME
    Warning: ftp_get(): php_connect_nonb() failed: Operation now in progress (115) in /home/webpages/lima-city/daniel/html/xyz/datenlesen.php on line 115
    
    Warning: ftp_get(): Type set to A in /home/webpages/lima-city/daniel/html/xyz/datenlesen.php on line 115
    es wurde ein problem festgestellt....
    Warning: ftp_nlist(): php_connect_nonb() failed: Operation now in progress (115) in /home/webpages/lima-city/daniel/html/xyz/datenlesen.php on line 125
    bool(false)


    Line 115:
    if (ftp_get($conn_id, $local_file, $server_file, FTP_ASCII)) {


    Line 125:
    $contents = ftp_nlist($conn_id, $ftp_serverver);



    Beitrag zuletzt geändert: 13.12.2015 17:11:27 von daniel
  10. Mach mal ein Ticket auf, und frage, ob Lima PHP patchen kann mit Hinweis auf diesen Thread.

    Denn der DWD hat den FTP-Server hinter einer NAT Firewall. Der FTP-Server sendet somit zu dir eine IP-Adresse aus dem privaten Raum, den PHP natürlich nicht routen kann. IM Gegensatz zu FTP-Programmen ignoriert PHP Standartmäßig diese gesendete IP-Adresse nicht.

    In meinem Link oben steht alles, was der Lima Support und du, wenn Lima PHP patcht, waas zutun ist.
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!