Start · Sprachen · PHP · Referenz · ftp_ssl_connect

ftp_ssl_connect

Funktion

Öffnet eine verschlüsselte SSL-FTP-Verbindung (FTPS, explizites SSL über Port 21) zum angegebenen Server und gibt eine FTP-Verbindungsressource zurück.

seit PHP 4.3.0 Kategorie: io

Signatur

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

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

Typ
FTP\Connection|false
Beschreibung
Gibt bei Erfolg eine 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 erfolgreich heruntergeladen: /tmp/bericht.pdf

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);
}
Upload erfolgreich: /uploads/daten.csv

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