Hier ist eine modifizierte Version von Hors Antwort, die für meinen Fall etwas besser funktioniert, da sie das Basisverzeichnis entfernt, das übergeben wird, und einen rekursiven Schalter hat, der auf false gesetzt werden kann, was ebenfalls praktisch ist. Um die Ausgabe besser lesbar zu machen, habe ich die Datei- und Unterverzeichnisdateien getrennt, sodass zuerst die Dateien und dann die Unterverzeichnisdateien hinzugefügt werden (siehe Ergebnis, was ich meine.)
Ich habe ein paar andere Methoden und Vorschläge ausprobiert und das ist, was ich am Ende hatte. Ich hatte bereits eine andere Arbeitsmethode, die sehr ähnlich war, aber anscheinend fehlschlug, wenn es ein Unterverzeichnis ohne Dateien gab, dieses Unterverzeichnis jedoch ein Unterverzeichnis mit Dateien hatte. Das Unterverzeichnis wurde nicht nach Dateien durchsucht , sodass möglicherweise einige Antworten getestet werden müssen für diesen Fall.) ... dachte sowieso, ich würde meine Version auch hier posten, falls jemand sucht ...
function get_filelist_as_array($dir, $recursive = true, $basedir = '', $include_dirs = false) {
if ($dir == '') {return array();} else {$results = array(); $subresults = array();}
if (!is_dir($dir)) {$dir = dirname($dir);}
if ($basedir == '') {$basedir = realpath($dir).DIRECTORY_SEPARATOR;}
$files = scandir($dir);
foreach ($files as $key => $value){
if ( ($value != '.') && ($value != '..') ) {
$path = realpath($dir.DIRECTORY_SEPARATOR.$value);
if (is_dir($path)) {
if ($include_dirs) {$subresults[] = str_replace($basedir, '', $path);}
if ($recursive) {
$subdirresults = get_filelist_as_array($path, $recursive, $basedir, $include_dirs);
$results = array_merge($results, $subdirresults);
}
} else {
$subresults[] = str_replace($basedir, '', $path);
}
}
}
if (count($subresults) > 0) {$results = array_merge($subresults, $results);}
return $results;
}
Ich nehme an, eine Sache, die Sie beachten sollten, um beim Aufrufen keinen $ basedir-Wert an diese Funktion zu übergeben ... Übergeben Sie meistens nur das $ dir (oder das Übergeben eines Dateipfads funktioniert jetzt auch) und optional $ recursive als false if and as erforderlich. Das Ergebnis:
[0] => demo-image.png
[1] => filelist.php
[2] => tile.png
[3] => 2015\header.png
[4] => 2015\08\background.jpg
Genießen! Okay, zurück zu dem Programm, in dem ich das tatsächlich verwende ...
UPDATE Zusätzliches Argument hinzugefügt, um Verzeichnisse in die Dateiliste aufzunehmen oder nicht (das Erinnern an andere Argumente muss übergeben werden, um dies zu verwenden.) ZB.
$results = get_filelist_as_array($dir, true, '', true);
RecursiveDirectoryIterator