Signatur
Beschreibung
FTP\Connection ist eine vollständig opake Klasse, d. h. sie besitzt keine öffentlich zugänglichen Eigenschaften oder Methoden. Objekte dieser Klasse werden ausschließlich von FTP-Funktionen wie ftp_connect() oder ftp_ssl_connect() erzeugt und anschließend als erstes Argument an alle weiteren FTP-Funktionen übergeben.
Vor PHP 8.1.0 lieferten ftp_connect() und ftp_ssl_connect() einen Wert vom Typ resource. Mit PHP 8.1.0 wurde dieser auf FTP\Connection umgestellt, um typsichere, explizit deklarierbare Parameter und Rückgabewerte in eigenem Code zu ermöglichen. Bestehender Code, der lediglich den Rückgabewert weiterreicht, funktioniert in der Regel ohne Änderungen, jedoch müssen explizite is_resource()-Prüfungen angepasst werden.
Da es sich um eine opake Klasse handelt, kann FTP\Connection nicht durch eigene Klassen erweitert oder instanziiert werden – der einzige zulässige Weg zur Erzeugung eines solchen Objekts ist der Aufruf der entsprechenden FTP-Verbindungsfunktionen. Die Verbindung wird durch ftp_close() beendet.
Beispiele
FTP-Verbindung aufbauen und Verzeichnis auflisten
<?php
$ftp = ftp_connect('ftp.example.com', 21, 10);
if (!$ftp instanceof FTP\Connection) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzer', 'geheim')) {
ftp_close($ftp);
die('Anmeldung fehlgeschlagen.');
}
// Passiv-Modus aktivieren
ftp_pasv($ftp, true);
$liste = ftp_nlist($ftp, '.');
if ($liste !== false) {
foreach ($liste as $datei) {
echo $datei . PHP_EOL;
}
}
ftp_close($ftp);
Typsicherer Parameter mit FTP\Connection
<?php
function dateiHochladen(FTP\Connection $ftp, string $remote, string $lokal): bool
{
if (!file_exists($lokal)) {
throw new RuntimeException("Lokale Datei nicht gefunden: $lokal");
}
return ftp_put($ftp, $remote, $lokal, FTP_BINARY);
}
$ftp = ftp_ssl_connect('ftp.example.com');
if ($ftp instanceof FTP\Connection) {
ftp_login($ftp, 'benutzer', 'geheim');
$ergebnis = dateiHochladen($ftp, '/public_html/index.php', '/var/www/index.php');
echo $ergebnis ? 'Upload erfolgreich.' : 'Upload fehlgeschlagen.';
ftp_close($ftp);
}
// Wichtig · Fallstricke
Migration von resource: Prüfungen der Form is_resource($ftp) müssen auf $ftp instanceof FTP\Connection umgestellt werden, da ein FTP\Connection-Objekt is_resource() nicht erfüllt.
Sicherheit: FTP überträgt Zugangsdaten im Klartext. Verwende wann immer möglich ftp_ssl_connect() statt ftp_connect(), um die Verbindung zu verschlüsseln. Achte darauf, Passwörter nicht im Quellcode hart zu kodieren.
Die Klasse ist nicht erweiterbar (final im semantischen Sinne) – ein extends FTP\Connection führt zu einem Fehler.