W3docs

ftp_close()

Die Funktion ftp_close() ist eine in PHP integrierte Funktion, die eine FTP-Verbindung schließt. Sie nimmt eine Verbindungskennung entgegen.

Was ftp_close() bewirkt

ftp_close() schließt eine aktive FTP-Verbindung, die zuvor mit ftp_connect() (oder ftp_ssl_connect()) geöffnet wurde. Die Funktion gibt den Netzwerk-Socket und die serverseitige Sitzung frei, sodass keine Seite die Verbindung länger als nötig offen hält.

Sie rufen sie auf, sobald Sie die Dateiübertragung abgeschlossen haben – nach allen ftp_get()-, ftp_put()- oder ftp_nlist()-Operationen. Die Funktion gibt bei Erfolg true und bei Fehler false zurück.

PHP schließt die FTP-Verbindung automatisch, wenn das Skript endet, sodass ein vergessenes ftp_close() keinen Socket dauerhaft offen lässt. Ein expliziter Aufruf ist dennoch wichtig in lang laufenden Skripten (Workers, Queue-Consumer, Schleifen, die viele Verbindungen öffnen), bei denen Sie die Serversitzung sofort freigeben möchten, anstatt auf das Ende des Skripts zu warten.

Syntax

ftp_close(FTP\Connection $ftp): bool
ParameterBeschreibung
$ftpDas von ftp_connect() oder ftp_ssl_connect() zurückgegebene Verbindungs-Handle.

Seit PHP 8.1 ist das Handle ein FTP\Connection-Objekt. In PHP 8.0 und früher war es eine resource. Die Verwendung ist in beiden Versionen identisch — Sie inspizieren es nie direkt, sondern übergeben es lediglich an die ftp_*-Funktionen.

Grundlegende Verwendung

Ein vollständiger Zyklus aus Verbinden → Anmelden → Arbeiten → Schließen sieht so aus:

<?php

// Open a connection to the FTP server
$ftp = ftp_connect('ftp.example.com');

// Authenticate
ftp_login($ftp, 'username', 'password');

// Download a file
ftp_get($ftp, 'local-copy.txt', 'remote-file.txt', FTP_BINARY);

// Always close the connection when you are done
ftp_close($ftp);

Die Grundidee: Jedes ftp_connect() sollte mit einem ftp_close() gepaart sein – genauso wie jede geöffnete Datei geschlossen werden sollte.

Den Rückgabewert prüfen

ftp_close() gibt einen boolean zurück, sodass Sie bestätigen können, dass die Verbindung sauber getrennt wurde:

<?php

if (ftp_close($ftp)) {
    echo "Connection closed successfully.\n";
} else {
    echo "Failed to close the connection.\n";
}

Sicheres Schließen mit try/finally

Falls eine Operation zwischen dem Verbinden und dem Schließen eine Ausnahme wirft oder vorzeitig abbricht, wird die ftp_close()-Zeile möglicherweise nie ausgeführt. Das Einschließen der Arbeit in try/finally stellt sicher, dass die Verbindung auch bei einem Fehler geschlossen wird:

<?php

$ftp = ftp_connect('ftp.example.com');

try {
    ftp_login($ftp, 'username', 'password');
    ftp_get($ftp, 'local.txt', 'remote.txt', FTP_BINARY);
    // ... more operations that might fail ...
} finally {
    // Runs whether the try block succeeded or threw
    ftp_close($ftp);
}

Dies ist das empfohlene Muster für Produktionscode: Der finally-Block ist der einzige Ort, der für die Freigabe der Verbindung verantwortlich ist.

Häufige Fehler

  • Das Handle nach dem Schließen verwenden. Sobald ftp_close() ausgeführt wurde, ist das Handle ungültig. Jeder nachfolgende ftp_*-Aufruf damit schlägt fehl.
  • Ein ungültiges Handle übergeben. Wenn ftp_connect() fehlschlägt, gibt es false zurück, keine Verbindung. Der Aufruf von ftp_close(false) löst in PHP 8 einen TypeError aus. Prüfen Sie die Verbindung, bevor Sie sie verwenden.
  • Aufruf ohne Parameter. ftp_close() erfordert das Verbindungs-Handle; es gibt keinen Standardwert.

Zusammenfassung

ftp_close() beendet eine mit ftp_connect() geöffnete FTP-Sitzung und gibt bei Erfolg true zurück. Obwohl PHP die Verbindung am Ende des Skripts schließt, hält ein expliziter Aufruf von ftp_close() – idealerweise innerhalb eines finally-Blocks – lang laufende Skripte ordentlich und gibt die Serversitzung sofort nach Abschluss der Arbeit frei. Weitere Informationen zum restlichen Workflow finden Sie unter ftp_connect(), ftp_login() und ftp_put().

Übungen

Übung
Was ist die korrekte Verwendung der Funktion ftp_close() in PHP?
Was ist die korrekte Verwendung der Funktion ftp_close() in PHP?
Was this page helpful?