Datum: 16.10.2008
, Kategorie:
PHP,
Server
Wir berichteten vor kurzem, dass die Handhabung der PEAR-Klasse Net_FTP im Zusammenhang mit dem passiven Modus nicht ganz eindeutig ist. Kommentator JR hat deshalb auf pear.php.net eine Funktionsänderung vorgeschlagen und siehe da: Nur wenige Tage später wurde die FTP-Klasse entsprechend erweitert.
Ein Blick auf die verschiedenen Versionen der Klasse zeigt, dass der Entwickler den Aufruf zum aktivieren einer passiven Verbindung1 erst im zweiten Anlauf an der richtigen Stelle platziert hat. Nämlich nach dem Login und nicht bereits schon nach dem Herstellen der Verbindung. Waren also nicht nur wir verwirrt. ;-)
Jetzt ist die Fußangel allerdings (fast)2 beseitigt. Man kann nun setPassive() vor dem Herstellen der Verbindung, nach dem Herstellen der Verbindung oder nach dem Login aufrufen - der Effekt ist derselbe.
1) Eine passive Verbindung aktivieren? Das ist ja wie laufen gehen (joggen).
2) Momentan allerdings funktioniert nur die bisherige Methode, denn folgender Code verhindert den automatischen Aufruf in der Methode login().
if (!$this->_passv) {
$this->setPassive();
}
Das Ausrufezeichen ist zu viel. Beim Aufruf von setPassive() wird $this->_passv = true gesetzt. $this->_passv dann aber später auf false zu Prüfen haut nicht hin. Interessanterweise ist das Ausrufezeichen erst beim Umzug des Codes von der Methode connect() in die Methode login() dazugekommen. Merkwürdig, merkwürdig.
Nachtrag:
Auf unseren Hinweis hin wurden auch die übrigen Fehler korrigiert. Funktioniert jetzt alles bestens. Vielen Dank dafür an dieser Stelle.