Signatur
Beschreibung
ftp_rawlist() sendet den FTP-Befehl LIST an den Server und gibt die Antwort als Array zurück, wobei jede Zeile der Serverantwort einem Eintrag im Array entspricht. Das Format der Zeilen ist serverseitig festgelegt (in der Regel Unix-ähnliches ls -l-Format) und muss daher manuell geparst werden.
Im Gegensatz zu ftp_nlist(), das nur Dateinamen liefert, enthält ftp_rawlist() vollständige Metadaten wie Berechtigungen, Besitzer, Gruppe, Dateigröße und Änderungsdatum. Dies ist nützlich, wenn Sie Datei-Eigenschaften auf einem FTP-Server ermitteln möchten, ohne für jede Datei einzelne Abfragen senden zu müssen.
Der Parameter $recursive bewirkt, dass der Server – sofern er dies unterstützt – rekursiv alle Unterverzeichnisse mit auflistet. Beachten Sie, dass nicht alle FTP-Server die rekursive Auflistung unterstützen oder das Ausgabeformat dabei variieren kann.
Da das zurückgegebene Format serverabhängig ist, sollte das Ergebnis mit regulären Ausdrücken oder speziellen Parser-Bibliotheken ausgewertet werden. Für eine einfachere und portablere Dateiliste bietet sich ftp_nlist() oder ftp_mlsd() (ab PHP 7.2) an.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ftp Pflicht | FTP\Connection | Eine gültige FTP-Verbindungsinstanz, die mit ftp_connect() oder ftp_ssl_connect() erstellt wurde. |
|
| $directory Pflicht | string | Der Pfad des Verzeichnisses auf dem FTP-Server, dessen Inhalt aufgelistet werden soll. Es können auch Optionen wie -la als Teil des Strings übergeben werden (z. B. '-la /pfad'), sofern der Server dies unterstützt. |
|
| $recursive | bool | false | Wenn true, wird der FTP-Befehl LIST -R verwendet, um Unterverzeichnisse rekursiv aufzulisten. Nicht alle Server unterstützen dies. |
Rückgabewert
ls -l-Format). Bei einem Fehler oder wenn das Verzeichnis nicht aufgelistet werden kann, wird false zurückgegeben.Beispiele
Einfache Dateiliste eines FTP-Verzeichnisses ausgeben
<?php
$ftp = ftp_connect('ftp.example.com');
if ($ftp === false) {
die('Verbindung fehlgeschlagen.');
}
if (!ftp_login($ftp, 'benutzer', 'geheim')) {
die('Login fehlgeschlagen.');
}
$liste = ftp_rawlist($ftp, '/');
if ($liste === false) {
echo 'Konnte Verzeichnis nicht lesen.';
} else {
foreach ($liste as $eintrag) {
echo $eintrag . PHP_EOL;
}
}
ftp_close($ftp);
Roh-Liste parsen und Dateinamen mit Größen extrahieren
<?php
$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'benutzer', 'geheim');
$liste = ftp_rawlist($ftp, '/public_html');
if ($liste !== false) {
foreach ($liste as $zeile) {
// Typisches Unix-Format: Berechtigungen Links Besitzer Gruppe Größe Monat Tag Zeit/Jahr Name
if (preg_match(
'/^([\-dl][rwxst\-]{9})\s+(\d+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\S+\s+\S+\s+\S+)\s+(.+)$/',
$zeile,
$treffer
)) {
$typ = $treffer[1][0]; // '-' = Datei, 'd' = Verzeichnis, 'l' = Symlink
$groesse = (int) $treffer[5];
$name = $treffer[7];
$typLabel = match($typ) {
'd' => 'Verzeichnis',
'l' => 'Symlink',
default => 'Datei'
};
printf("%-12s %-30s %d Bytes\n", $typLabel, $name, $groesse);
}
}
}
ftp_close($ftp);
// Wichtig · Fallstricke
Serverseitiges Format: Das Format der zurückgegebenen Zeilen ist nicht standardisiert und hängt vom FTP-Server ab. Auf Unix-Systemen entspricht es meist dem ls -l-Format, Windows-FTP-Server können ein abweichendes Format liefern. Parser sollten daher defensiv geschrieben werden.
Passive vs. aktive Verbindung: Bei Problemen mit der Verbindung hinter Firewalls oder NAT sollte ftp_pasv($ftp, true) vor dem Aufruf verwendet werden, um den passiven Modus zu aktivieren.
Alternative: Für eine maschinenlesbarere und serverunabhängige Ausgabe sollte ftp_mlsd() (verfügbar ab PHP 7.2) bevorzugt werden, sofern der Server MLSD unterstützt.
Objekt-API: Ab PHP 8.1 ist FTP\Connection eine echte Klasse; davor war die Ressource vom Typ resource. Der Code bleibt dabei weitgehend kompatibel.