Signatur
Beschreibung
ftp_ssl_connect() stellt eine gesicherte FTP-Verbindung mittels SSL/TLS zum angegebenen Server her. Im Gegensatz zu ftp_connect(), das eine unverschlüsselte Verbindung aufbaut, schützt diese Funktion die Übertragung von Zugangsdaten und Befehlen vor Mithören. Es handelt sich dabei um explizites FTPS (FTP über SSL/TLS), nicht um SFTP (SSH File Transfer Protocol).
Die Funktion setzt voraus, dass PHP mit OpenSSL-Unterstützung kompiliert wurde und die FTP-Erweiterung vorhanden ist. Ist OpenSSL nicht verfügbar, gibt die Funktion false zurück, ohne eine Verbindung herzustellen. Nach erfolgreicher Verbindung muss die Anmeldung mit ftp_login() erfolgen.
Der zurückgegebene Verbindungs-Handle (FTP\Connection-Objekt ab PHP 8.1, davor eine Ressource) wird an alle weiteren FTP-Funktionen wie ftp_login(), ftp_get() oder ftp_put() übergeben. Die Verbindung sollte am Ende mit ftp_close() explizit geschlossen werden.
Beachte: Nicht alle FTP-Server unterstützen explizites FTPS. Manche Server erfordern implizites FTPS über Port 990, was von dieser Funktion nicht unterstützt wird. In solchen Fällen kann die cURL-Erweiterung als Alternative verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Hostname oder IP-Adresse des FTP-Servers. Schemata wie ftp:// oder abschließende Schrägstriche dürfen hier nicht angegeben werden. |
|
| $port | int | 21 | Portnummer des FTP-Servers. Standardmäßig wird Port 21 verwendet. Für explizites FTPS ist dies der übliche Wert. |
| $timeout | int | 90 | Timeout in Sekunden für alle Netzwerkoperationen auf dieser Verbindung. Der Standardwert beträgt 90 Sekunden. Kann nachträglich mit ftp_set_option() geändert werden. |
Rückgabewert
FTP\Connection-Instanz (ab PHP 8.1) bzw. eine FTP-Ressource zurück. Gibt false zurück, wenn die Verbindung fehlgeschlagen ist oder OpenSSL nicht verfügbar ist.Beispiele
Einfache SSL-FTP-Verbindung herstellen und Datei herunterladen
<?php
$ftp = ftp_ssl_connect('ftp.beispiel.de', 21, 30);
if ($ftp === false) {
die('SSL-FTP-Verbindung fehlgeschlagen. OpenSSL verfügbar?');
}
if (!ftp_login($ftp, 'benutzername', 'geheimesPasswort')) {
ftp_close($ftp);
die('Anmeldung fehlgeschlagen.');
}
// Passiven Modus aktivieren (empfohlen hinter Firewalls)
ftp_pasv($ftp, true);
// Datei vom Server herunterladen
$remote = '/daten/bericht.pdf';
$lokal = '/tmp/bericht.pdf';
if (ftp_get($ftp, $lokal, $remote, FTP_BINARY)) {
echo "Datei erfolgreich heruntergeladen: $lokal\n";
} else {
echo "Download fehlgeschlagen.\n";
}
ftp_close($ftp);
Datei sicher auf einen FTPS-Server hochladen
<?php
$host = 'ftps.meinserver.de';
$benutzer = 'upload_user';
$passwort = 's3cr3t!';
$ftp = ftp_ssl_connect($host);
if (!$ftp) {
throw new RuntimeException('Konnte keine SSL-FTP-Verbindung aufbauen.');
}
try {
if (!ftp_login($ftp, $benutzer, $passwort)) {
throw new RuntimeException('Ungültige FTP-Zugangsdaten.');
}
ftp_pasv($ftp, true);
$lokaldatei = '/var/export/daten.csv';
$remotepfad = '/uploads/daten.csv';
if (ftp_put($ftp, $remotepfad, $lokaldatei, FTP_ASCII)) {
echo "Upload erfolgreich: $remotepfad\n";
} else {
echo "Upload fehlgeschlagen.\n";
}
} finally {
ftp_close($ftp);
}
// Wichtig · Fallstricke
OpenSSL-Voraussetzung: PHP muss mit --with-openssl kompiliert sein und die FTP-Erweiterung muss aktiv sein (extension=ftp in der php.ini). Andernfalls gibt die Funktion stets false zurück.
Kein SFTP: Diese Funktion implementiert explizites FTPS (FTP + SSL/TLS, typischerweise Port 21), nicht SFTP (Port 22). Für SFTP ist die ssh2- oder phpseclib-Bibliothek erforderlich.
Zugangsdaten: Obwohl die Verbindung verschlüsselt ist, sollten Passwörter niemals hart im Quellcode stehen. Verwende Umgebungsvariablen oder sichere Konfigurationsdateien außerhalb des Web-Roots.
Veraltetes Ressource-Modell: Vor PHP 8.1 wurde eine resource vom Typ ftp zurückgegeben. Ab PHP 8.1 ist es ein FTP\Connection-Objekt. Prüfungen mit === false funktionieren in beiden Fällen korrekt.