Probleme mit FTP in PHP
Verfasst: 13.09.2007, 06:58
Hi,
ich habe eine Domain bei einen Webhoster liegen, wo ich ein PHP Script gebaut habe, was sich mit unseren eigenen Server connected und sich die neusten Daten zieht. Das Script läuft wunderbar. Um mein Problem zu schildern Zeige ich den Auschnitt der zu meinem Problem führt:
Wenn ich mit dem Script so wie oben arbeite, ist alles traumhaft. Hier liegt also noch kein Problem vor.
Nun bekam ich eine Email vom Webhoster mit diesen Zeilen:
habe quasi nur ftp_pasv eingebaut und den if befehl um ein statement erweitert. Ist der Umbau so korrekt mit ftp_pasv und dem Parameter true?
Wenn ich das Script nun ausführe, läuft es und läuft, wie in einer endlosschleife. Der Befehl ftp_nlist scheint nichts zurückzugeben. wenn ich ftp_nlist auskommentiere, zeit das script mir wenigstens an, das er connected ist. wenn ich das mit dem ftp_nlist einfach laufen lasse, kommt irgendwann diese meldung:
"Warning: ftp_nlist() [function.ftp-nlist]: php_connect_nonb() failed: Operation now in progress (115) in ...."
funktionieren tut das script dadurch jedoch nicht.
Das gleiche Script ausgeführt auf einer Domain auf unseren eigenen Server (der gleiche Server zu dem sich FTP connected) da funktioniert es.
Meine Fragen Quasi:
1. Habe ich das Problem vom Webhoster in meinen PHP Script richtig gelöst, damit es keinen Port mehr bindet?
2. Wenn das erste Script richtig ist, kann es dann eine Einstellung an unseren Server sein, dass es so nicht geht? Immerhin geht es ja, wenn ich es direkt vom Server aufrufe. Was für eine Einstellung könnte es sein, dass es nicht mehr geht? Unser Server läuft soweit auf OS X.
Phil
ich habe eine Domain bei einen Webhoster liegen, wo ich ein PHP Script gebaut habe, was sich mit unseren eigenen Server connected und sich die neusten Daten zieht. Das Script läuft wunderbar. Um mein Problem zu schildern Zeige ich den Auschnitt der zu meinem Problem führt:
Code: Alles auswählen
// connect to ftp
$ftp = ftp_connect($server, $port);
$res = ftp_login($ftp, $user, $passwort);
if($ftp && $res)
{
echo "connected to ftp<br>";
// get file list
$list = ftp_nlist($ftp, ".");
echo "<pre>";
print_r($list);
echo "</pre>";
// weiter ziehe ich mir die daten runter
// ...
// disconnect
ftp_quit($ftp);
}
else
{
echo "not connected<br>";
}
Nun bekam ich eine Email vom Webhoster mit diesen Zeilen:
Okay, ich kenne mich mit active mode, passive mode und so gar nicht aus und weiß auch nicht so genau was der Webhoster von mir will, aber ich vermute mal, dass ich den Befehl ftp_pasv mit einbauen soll. Ferner will ich es auch so umbauen, dass ich da keine Probleme verursache. Okay, ich habe meinen Quellcode so umgebaut:auf unseren Präsenzen ist die Verwendung von Programmen, die einen Port "binden", nicht erlaubt. Dies ist u.a. auch bei FTP im active mode der
Fall. Bitte passen Sie Ihr Script
/.../htdocs/domain.de/ordner/copy_sources.php
entsprechendn an (ftp_pasv).
Code: Alles auswählen
// connect to ftp
$ftp = ftp_connect($server, $port);
$res = ftp_login($ftp, $user, $passwort);
$mode = ftp_pasv($ftp, true);
if($ftp && $res && $mode)
{
echo "connected to ftp<br>";
// get file list
$list = ftp_nlist($ftp, ".");
echo "<pre>";
// show file list
print_r($list);
echo "</pre>";
// disconnect
ftp_quit($ftp);
}
else
{
echo "not connected<br>";
}
Wenn ich das Script nun ausführe, läuft es und läuft, wie in einer endlosschleife. Der Befehl ftp_nlist scheint nichts zurückzugeben. wenn ich ftp_nlist auskommentiere, zeit das script mir wenigstens an, das er connected ist. wenn ich das mit dem ftp_nlist einfach laufen lasse, kommt irgendwann diese meldung:
"Warning: ftp_nlist() [function.ftp-nlist]: php_connect_nonb() failed: Operation now in progress (115) in ...."
funktionieren tut das script dadurch jedoch nicht.
Das gleiche Script ausgeführt auf einer Domain auf unseren eigenen Server (der gleiche Server zu dem sich FTP connected) da funktioniert es.
Meine Fragen Quasi:
1. Habe ich das Problem vom Webhoster in meinen PHP Script richtig gelöst, damit es keinen Port mehr bindet?
2. Wenn das erste Script richtig ist, kann es dann eine Einstellung an unseren Server sein, dass es so nicht geht? Immerhin geht es ja, wenn ich es direkt vom Server aufrufe. Was für eine Einstellung könnte es sein, dass es nicht mehr geht? Unser Server läuft soweit auf OS X.
Phil