Signatur
Beschreibung
ftp_mlsd() ruft eine strukturierte Verzeichnisliste vom FTP-Server ab, die auf dem standardisierten MLSD-Befehl (Machine Listing Directory) gemäß RFC 3659 basiert. Im Gegensatz zu ftp_nlist() oder ftp_rawlist() liefert diese Funktion maschinenlesbare, einheitlich formatierte Metadaten zu jeder Datei und jedem Verzeichnis.
Der Rückgabewert ist ein Array von assoziativen Arrays, wobei jeder Eintrag mindestens den Schlüssel name (Dateiname) sowie je nach Serverkonfiguration weitere Fakten wie type (z. B. file, dir, cdir, pdir), size, modify (Zeitstempel im Format YYYYMMDDHHmmss) und Berechtigungen (unix.mode, perm) enthält.
Diese Funktion eignet sich besonders gut für automatisierte FTP-Clients, Synchronisierungswerkzeuge und Backup-Skripte, bei denen zuverlässige und plattformunabhängige Datei-Metadaten benötigt werden. Da das MLSD-Format serverseitig standardisiert ist, entfällt das fehleranfällige Parsen von ftp_rawlist()-Ausgaben.
Beachte, dass nicht alle FTP-Server den MLSD-Befehl unterstützen. In diesem Fall gibt die Funktion false zurück. Für ältere Server muss auf ftp_rawlist() oder ftp_nlist() zurückgegriffen werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine gültige FTP-Verbindungsressource, wie sie von ftp_connect() oder ftp_ssl_connect() zurückgegeben wird. |
|
| $directory Pflicht | string | Pfad des Verzeichnisses auf dem FTP-Server, dessen Inhalt aufgelistet werden soll. Ein leerer String oder . steht für das aktuelle Arbeitsverzeichnis. |
Rückgabewert
name sowie weitere vom Server bereitgestellte Fakten (z. B. type, size, modify, perm). Wird false zurückgegeben, wenn der MLSD-Befehl fehlschlägt oder vom Server nicht unterstützt wird.Beispiele
Verzeichnisinhalt mit Metadaten auflisten
<?php
$ftp = ftp_connect('ftp.example.com');
if (!$ftp) {
die('Verbindung fehlgeschlagen');
}
if (!ftp_login($ftp, 'benutzer', 'passwort')) {
die('Anmeldung fehlgeschlagen');
}
$eintraege = ftp_mlsd($ftp, '/public_html');
if ($eintraege === false) {
echo 'MLSD wird vom Server nicht unterstützt oder Verzeichnis nicht gefunden.';
} else {
foreach ($eintraege as $eintrag) {
$name = $eintrag['name'];
$typ = $eintrag['type'] ?? 'unbekannt';
$groesse = isset($eintrag['size']) ? $eintrag['size'] . ' Bytes' : 'n/a';
echo "[$typ] $name — $groesse\n";
}
}
ftp_close($ftp);
Nur Dateien filtern und nach Änderungsdatum sortieren
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzer', 'passwort');
$eintraege = ftp_mlsd($ftp, '/backups');
if ($eintraege === false) {
die('Verzeichnis konnte nicht gelesen werden.');
}
// Nur reguläre Dateien
$dateien = array_filter($eintraege, fn($e) => ($e['type'] ?? '') === 'file');
// Nach Änderungsdatum absteigend sortieren
usort($dateien, fn($a, $b) => strcmp($b['modify'] ?? '', $a['modify'] ?? ''));
foreach ($dateien as $datei) {
$datum = isset($datei['modify'])
? DateTime::createFromFormat('YmdHis', $datei['modify'])->format('d.m.Y H:i:s')
: 'unbekannt';
echo $datei['name'] . ' — geändert am: ' . $datum . "\n";
}
ftp_close($ftp);
// Wichtig · Fallstricke
Serverkompatibilität: ftp_mlsd() setzt voraus, dass der FTP-Server den RFC-3659-konformen MLSD-Befehl unterstützt. Viele ältere oder nicht standardkonforme Server unterstützen diesen Befehl nicht. Teste die Verfügbarkeit und halte einen Fallback auf ftp_rawlist() bereit.
Passiermodus: In vielen Netzwerkumgebungen (NAT, Firewall) muss vor der Verwendung ftp_pasv($ftp, true) aufgerufen werden, um den passiven Modus zu aktivieren, da sonst Datenverbindungen fehlschlagen können.
PHP-Version: Die Funktion ist erst ab PHP 7.2.0 verfügbar. In älteren Projekten steht sie nicht zur Verfügung.
Sicherheit: Verwende für Produktivumgebungen nach Möglichkeit ftp_ssl_connect() statt ftp_connect(), um Zugangsdaten und Daten verschlüsselt zu übertragen.