Die Nutzung der PEAR-Klasse Net_FTP ist prinzipiell gesehen relativ einfach, beinhaltet allerdigns eine kleine Fußangel. Zunächst jedoch der Beispiel-Code:
<?php
// Klasse laden und Instanz erzeugen
require_once 'Net/FTP.php';
$ftp = new Net_FTP();
// Einstellungen für Host, Port, Benutzernamen und Passwort
$ftp->setHostname('example.com');
$ftp->setPort('21');
$ftp->setUsername('Benutzername');
$ftp->setPassword('pAss.w0rt');
// Verbindung zum Server aufbauen
if ($res = $ftp->connect()) {
// Mit Benutzernamen und Passwort einloggen
if ($ftp->login()) {
// Passive Verbindung nutzen
$ftp->setPassive();
/**
* Die Datei file.zip vom lokalen Server auf den anderen
* Server hochladen und in uploaded_file.zip umbenennen.
* Dabei wird eine eventuell bestehende Datei
* überschrieben (true). Im Falle einer Textdatei muss
* FTP_ASCII statt FTP_BINARY verwendet werden.
*/
$ftp->put('file.zip', 'uploaded_file.zip', true, FTP_BINARY);
}
// Verbindung trennen
$ftp->disconnect();
}
?>
Mit der Methode setPassive() wird auf passives FTP umgeschaltet. Dabei macht der Client die Verbindungen zum Server und legt den Port für den Datenaustausch fest. Bei aktivem FTP macht dies der Server, was jedoch erfahrungsgemäß zu Problemen mit der Firewall des Clients führen kann. Da in diesem Fall beide Rechner Server sind kann man annehmen, dass der Client mit einer Firewall ausgestattet ist. Passives FTP bietet sich also an.
Die Fußangel
Alle Einstellungen wie Host, Port, Benutzername und Password können über die jeweiligen Setter-Funktionen vor dem Öffnen der Verbindung festgelegt werden. Das passive FTP kann jedoch erst nach dem Login aktiviert werden (siehe Code-Beispiel). Der Methodenname setPassive() ist da etwas irreführend. activatePassive() oder ähnliches wäre da eventuell eine bessere Bezeichnung. Beim Aufruf der Methode wird der Modus nicht nur eingestellt, sondern es wird auch sofort das Kommando per ftp_pasv() an den Server gesendet. Das funktioniert logischerweise nur, sofern die Verbindung bereits besteht und der Benutzer eingeloggt ist.
War diese Anleitung hilfreich? Über Hinweise oder Anmerkungen würden wir uns freuen.