Signatur
Beschreibung
ftp_connect() öffnet eine FTP-Verbindung zum angegebenen Host auf dem gewünschten Port (Standard: 21). Die Funktion gibt bei Erfolg ein FTP\Connection-Objekt (ab PHP 8.1 ein echter Objekt-Typ, zuvor eine Ressource) zurück, das anschließend für alle weiteren FTP-Operationen wie ftp_login(), ftp_get() oder ftp_put() benötigt wird.
Der Parameter $timeout legt fest, wie viele Sekunden auf eine Antwort des Servers gewartet wird. Ein zu klein gewählter Wert kann bei langsamen Netzwerken oder trägen Servern zu vorzeitigen Verbindungsabbrüchen führen. Der Standardwert von 90 Sekunden ist für die meisten Anwendungsfälle ausreichend.
Wichtig: ftp_connect() stellt eine unverschlüsselte Verbindung her. Werden sensible Daten oder Zugangsdaten übertragen, sollte stattdessen ftp_ssl_connect() verwendet werden, um eine TLS-verschlüsselte Verbindung aufzubauen.
Typische Einsatzgebiete sind automatisierte Datei-Uploads auf Web-Server, das Abholen von Dateien von externen Datenlieferanten sowie das periodische Synchronisieren von Verzeichnissen in Batch-Prozessen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $host Pflicht | string | Hostname oder IP-Adresse des FTP-Servers. Das Präfix ftp:// darf nicht angegeben werden. |
|
| $port | int | 21 | Port, auf dem der FTP-Server lauscht. Wird kein Wert übergeben, wird der Standard-FTP-Port 21 verwendet. |
| $timeout | int | 90 | Zeitlimit in Sekunden für Netzwerkoperationen. Kann nachträglich auch per ftp_set_option() geändert werden. |
Rückgabewert
FTP\Connection-Objekt (bzw. vor PHP 8.1 eine Ressource vom Typ ftp), das als Handle für alle weiteren FTP-Funktionen dient. Schlägt die Verbindung fehl, wird false zurückgegeben.Beispiele
Einfache FTP-Verbindung mit Login und Datei-Download
<?php
$host = 'ftp.example.com';
$user = 'mein_benutzer';
$passwort = 'geheimes_passwort';
$ftp = ftp_connect($host);
if ($ftp === false) {
die('Verbindung zu ' . $host . ' fehlgeschlagen.');
}
if (!ftp_login($ftp, $user, $passwort)) {
ftp_close($ftp);
die('Login fehlgeschlagen.');
}
// Passive Übertragung aktivieren (hilfreich hinter Firewalls)
ftp_pasv($ftp, true);
// Datei herunterladen
$remote = '/public_html/daten.csv';
$local = '/tmp/daten.csv';
if (ftp_get($ftp, $local, $remote, FTP_BINARY)) {
echo 'Datei erfolgreich heruntergeladen.';
} else {
echo 'Download fehlgeschlagen.';
}
ftp_close($ftp);
Datei auf FTP-Server hochladen mit benutzerdefiniertem Timeout
<?php
$ftp = ftp_connect('ftp.example.com', 21, 120); // 2 Minuten Timeout
if ($ftp === false) {
die('Verbindung fehlgeschlagen.');
}
ftp_login($ftp, 'benutzer', 'passwort');
ftp_pasv($ftp, true);
$lokal = '/var/www/export/bericht.pdf';
$remote = '/uploads/bericht.pdf';
if (ftp_put($ftp, $remote, $lokal, FTP_BINARY)) {
echo 'Upload erfolgreich.';
} else {
echo 'Upload fehlgeschlagen.';
}
ftp_close($ftp);
// Wichtig · Fallstricke
Sicherheitshinweis: FTP überträgt Benutzername, Passwort und Daten im Klartext. In Produktivumgebungen sollte immer ftp_ssl_connect() oder ein alternatives Protokoll wie SFTP (über die SSH2-Erweiterung) verwendet werden.
Firewall/NAT: Im aktiven FTP-Modus kann es hinter NAT oder Firewalls zu Verbindungsproblemen kommen. ftp_pasv($ftp, true) schaltet auf den passiven Modus um, der in den meisten Umgebungen zuverlässiger funktioniert.
PHP 8.1: Ab PHP 8.1 gibt ftp_connect() ein FTP\Connection-Objekt statt einer veralteten Ressource zurück. Code, der explizit auf den Typ resource prüft (z. B. is_resource()), muss angepasst werden.