W3docs

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:

  1. host: Der Name des FTP-Servers, zu dem die Verbindung hergestellt werden soll.
  2. port: Die Portnummer für die Verbindung. Dieser Parameter ist optional und hat den Standardwert 21.
  3. 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 der ftp_*-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 die ssh2_*-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 erfolgreiches ftp_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 ftp und openssl kompiliert wurde. Sichern Sie sich mit function_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

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.

Übung

Übung
Was ist die Funktion von ftp_ssl_connect() in PHP?
Was ist die Funktion von ftp_ssl_connect() in PHP?
Was this page helpful?