Start · Sprachen · PHP · Referenz · ftp_connect

ftp_connect

Funktion

Stellt eine unverschlüsselte FTP-Verbindung zu einem Server her und gibt eine FTP-Verbindungsressource zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

ftp_connect(string $host, int $port = 21, int $timeout = 90): FTP\Connection|false

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

Typ
FTP\Connection|false
Beschreibung
Bei Erfolg ein 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 erfolgreich heruntergeladen.

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);
Upload erfolgreich.

// 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.