mit php ftp verbinden und datei downloaden
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
adresse
aufbauen
benutzername
code
datei
erstellen
folgende fehlermeldung
ftp
login
operation
problem
server
set
special
speichern
text
type
verbindung
verbindungsaufbau
wetter
-
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); ?>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
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. -
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)) {
-
Ist binary nicht für Bilder?
Hast du auch tatsächlich nach dem Login im Code?ftp_pasv($conn_id, true);
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/
-
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 -
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. -
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 -
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage