ftp_ssl_connect()
Die PHP-Funktion ftp_ssl_connect() stellt eine sichere SSL-verschlüsselte Verbindung zu einem FTP-Server her. Hier erfahren Sie alles darüber.
Die PHP-Funktion ftp_ssl_connect() verstehen
Die Funktion ftp_ssl_connect() öffnet eine explizite FTPS-Verbindung (FTP über SSL/TLS) zu einem FTP-Server. Sie ist das sichere Gegenstück zu ftp_connect(): Beide geben ein Verbindungs-Handle zurück, das Sie an die anderen ftp_*-Funktionen übergeben, aber ftp_ssl_connect() hebt den Steuerkanal auf eine verschlüsselte TLS-Sitzung an, sodass Ihre Anmeldeinformationen und Befehle nicht im Klartext gesendet werden.
Diese Seite erklärt, was die Funktion leistet, ihre Parameter und ihren Rückgabewert, ein vollständiges Praxisbeispiel sowie häufige Fallstricke (FTPS vs. SFTP, Zertifikatsprüfung und passiver Modus).
Was ist ftp_ssl_connect()?
Die Funktion ftp_ssl_connect() stellt eine sichere SSL/TLS-verschlüsselte Verbindung zu einem FTP-Server her. PHP muss dazu mit der ftp-Erweiterung und der openssl-Erweiterung kompiliert worden sein. Sie akzeptiert drei Parameter:
host: Der Name des FTP-Servers, zu dem die Verbindung hergestellt werden soll.port: Die Portnummer für die Verbindung. Dieser Parameter ist optional und hat den Standardwert 21.timeout: Das Timeout für den Verbindungsversuch in Sekunden. Dieser Parameter ist optional und hat den Standardwert 90 Sekunden.
Hinweis: PHP prüft SSL-Zertifikate standardmäßig anhand des CA-Bundles des Systems. In Produktionsumgebungen sollten Sie sicherstellen, dass Ihre CA-Zertifikate aktuell sind, um Verbindungsfehler zu vermeiden.
Die Funktion gibt bei Erfolg ein FTP-Verbindungs-Handle zurück (ein FTP\Connection-Objekt ab PHP 8.1+ oder eine Ressource in früheren Versionen) und false bei einem Fehler.
FTPS vs. SFTP — das Richtige wählen
Diese beiden Protokolle werden häufig verwechselt, weil beide Dateien sicher übertragen, sind aber völlig unterschiedlich:
- FTPS (was diese Funktion spricht) ist das FTP-Protokoll, das in TLS eingebettet ist. Verwenden Sie
ftp_ssl_connect()und den Rest derftp_*-Familie. - SFTP ist ein Subsystem von SSH und hat nichts mit FTP zu tun. PHP kann es nicht über die
ftp_*-Funktionen erreichen — dazu verwenden Sie diessh2_*-Erweiterung oder eine Bibliothek wie phpseclib.
Wenn Ihr Server nur SSH/SFTP anbietet, wird ftp_ssl_connect() keine Verbindung herstellen.
Syntax von ftp_ssl_connect()
Die Syntax der Funktion ftp_ssl_connect() lautet wie folgt:
Syntax von ftp_ssl_connect()
resource ftp_ssl_connect ( string $host [, int $port = 21 [, int $timeout = 90 ]] )Die Funktion ftp_ssl_connect() akzeptiert drei Parameter, von denen nur der host-Parameter erforderlich ist. Der port-Parameter gibt die Portnummer für die Verbindung an, und der timeout-Parameter gibt das Timeout für den Verbindungsversuch in Sekunden an.
Verwendung von ftp_ssl_connect()
Um die Funktion ftp_ssl_connect() zu verwenden, rufen Sie sie einfach auf und übergeben die erforderlichen Parameter. Hier ist ein Beispiel:
Verwendung von ftp_ssl_connect()
<?php
// Set up a secure SSL-encrypted FTP connection
$conn = ftp_ssl_connect('ftp.example.com', 21, 60);
// Login with your FTP credentials
ftp_login($conn, 'username', 'password');
// Perform FTP operations
// Close the FTP connection
ftp_close($conn);In diesem Beispiel stellen wir mit der Funktion ftp_ssl_connect() eine sichere SSL-verschlüsselte Verbindung zum FTP-Server her. Anschließend melden wir uns mit unseren FTP-Anmeldedaten über die Funktion ftp_login() an. Nach der Anmeldung können wir beliebige FTP-Operationen durchführen. Abschließend schließen wir die FTP-Verbindung mit der Funktion ftp_close().
Ein vollständiger, produktionsreifer Upload
Das obige Minimalbeispiel lässt die Prüfungen aus, die im echten Code tatsächlich benötigt werden. Die nachfolgende Version prüft, ob Verbindung und Anmeldung erfolgreich waren, schaltet auf den passiven Modus um (hinter den meisten Firewalls und NAT erforderlich) und lädt eine Datei hoch:
Vollständiger FTPS-Upload
<?php
$host = 'ftp.example.com';
$user = 'username';
$pass = 'password';
// 1. Open the secure connection (false on failure)
$conn = ftp_ssl_connect($host, 21, 30);
if ($conn === false) {
exit("Could not connect to {$host}\n");
}
// 2. Authenticate
if (!ftp_login($conn, $user, $pass)) {
ftp_close($conn);
exit("Login failed for {$user}\n");
}
// 3. Passive mode — almost always required for FTPS behind a firewall
ftp_pasv($conn, true);
// 4. Upload a local file in binary mode
if (ftp_put($conn, 'remote/report.csv', 'local/report.csv', FTP_BINARY)) {
echo "Upload succeeded\n";
} else {
echo "Upload failed\n";
}
// 5. Always close the connection
ftp_close($conn);Die entscheidenden Gewohnheiten hier — den Rückgabewert jedes Aufrufs zu prüfen und den passiven Modus mit ftp_pasv() zu aktivieren — machen FTPS in der Praxis zuverlässig. Ohne passiven Modus hängen Datenübertragungen hinter Firewalls häufig, weil der Server versucht, eine Rückverbindung zu öffnen, die der Client nicht akzeptieren kann.
Fehlerbehandlung in ftp_ssl_connect()
Es ist wichtig, Fehler bei der Verwendung der Funktion ftp_ssl_connect() korrekt zu behandeln. Gibt die Funktion false zurück, bedeutet das, dass der Vorgang nicht erfolgreich war. Hier ist ein Beispiel zur Fehlerbehandlung:
Fehlerbehandlung in ftp_ssl_connect()
<?php
$conn = ftp_ssl_connect('ftp.example.com');
if ($conn === false) {
echo "Failed to establish a secure SSL-encrypted connection to the FTP server.\n";
} else {
// Perform FTP operations
// Close the FTP connection
ftp_close($conn);
}Durch angemessene Fehlerbehandlung und die Prüfung des Rückgabewerts der Funktion können Sie den Erfolg Ihrer FTP-Operationen mit der Funktion ftp_ssl_connect() sicherstellen.
Häufige Fallstricke
- Ein zurückgegebenes Handle bedeutet nicht, dass Sie angemeldet sind.
ftp_ssl_connect()öffnet nur den verschlüsselten Kanal; Sie benötigen dennoch ein erfolgreichesftp_login(), bevor eine Operation funktioniert. - Den passiven Modus vergessen. Die meisten Datenübertragungen stocken hinter Firewalls oder NAT, wenn Sie nach der Anmeldung nicht
ftp_pasv($conn, true)aufrufen. - FTPS mit SFTP verwechseln. Wie oben erwähnt, kann diese Funktion nicht mit einem SSH/SFTP-Server kommunizieren.
- Prüfen, ob die Funktion vorhanden ist. Sie ist nur verfügbar, wenn PHP mit den Erweiterungen
ftpundopensslkompiliert wurde. Sichern Sie sich mitfunction_exists('ftp_ssl_connect')ab, wenn Sie den Build nicht garantieren können. - Implizites FTPS (Port 990) wird nicht unterstützt.
ftp_ssl_connect()führt nur explizites FTPS durch. Für implizites FTPS verwenden Sie stattdessen einen Stream-Wrapper oder eine dedizierte Bibliothek.
Verwandte Funktionen
ftp_connect()— öffnet eine einfache (unverschlüsselte) FTP-Verbindung.ftp_login()— Authentifizierung nach dem Verbindungsaufbau.ftp_pasv()— schaltet den passiven Übertragungsmodus um.ftp_get()/ftp_put()— Dateien herunterladen und hochladen.ftp_close()— schließt die Verbindung.- PHP FTP-Übersicht — die vollständige FTP-Funktionsfamilie.
Fazit
Die Funktion ftp_ssl_connect() ist der sichere Einstiegspunkt in das PHP-FTP-Toolkit und öffnet eine explizite FTPS-Verbindung, sodass Anmeldedaten und Befehle über TLS statt im Klartext übertragen werden. Kombiniert mit einem geprüften ftp_login(), aktiviertem passivem Modus und der Überprüfung jedes Rückgabewerts ergibt sich ein zuverlässiger, sicherer Dateiübertragungsworkflow. Wenn der entfernte Server SSH/SFTP statt FTPS spricht, greifen Sie stattdessen auf die ssh2_*-Erweiterung zurück.