InternInhaltsverzeichnisGlossarBausteineLinklisteTutorialsKommentare

Thema: PHP - Dateien in Verzeichnis rekursiv auflisten, mit Filter Artikel anzeigen

Jan schrieb am Freitag, den 22 Oktober 2021 #1
Werner ich hänge fest. Brings einfach nicht hin.
Bekannt ist das Hauptverzeichnis.
Nun benötige ich vom Hauptverzeichnis die Unterverzeichnise bis zur dritten Ebene im Array.

Hauptverzeichnis/2021/10/19
Hauptverzeichnis/2021/10/20
Hauptverzeichnis/2021/10/21
Hauptverzeichnis/2021/10/22
usw...

Das funktioniert:
function getSubDirectories($dir)
{
$subDir = array();
$directories = array_filter(glob($dir), 'is_dir');
$subDir = array_merge($subDir, $directories);
foreach ($directories as $directory) $subDir = array_merge($subDir, getSubDirectories($directory.'/*'));
return $subDir;
}

Aber das Array sieht so aus:
Hauptverzeichnis
Hauptverzeichnis/2021
Hauptverzeichnis/2021/10
Hauptverzeichnis/2021/10/19
Hauptverzeichnis/2021/10/20
Hauptverzeichnis/2021/10/21
Hauptverzeichnis/2021/10/22
usw...

Benötige aber nur den Direkten Pfad also vom Beispiel die letzten vier.
Würde es gerne mit glob machen weil ich denke das es damit die schnellere Variante ist als diese Variante:

function DateiRekursiv($Hauptverzeichnis)
{
$VerzeichnisArray = array();
$startdir = "./$Hauptverzeichnis"; // Auszulesendes Verzeichnis
$extension = '/\.(?:jpg|jpeg|gif)$/i'; // Dateiendungen (hier jpg, ,jpeg, gif)
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($startdir));
$selected_files = new RegexIterator($iterator, $extension);

foreach ($selected_files as $file)
{
if (!$file->isFile())
{
continue;
}
//echo $file->getPathname() . "<br>";
//echo $file->getPath() . "<br>";
$VerzeichnisArray[] = $file->getPath();
}
//print count($VerzeichnisArray);
$VerzeichnisArray = array_unique ( $VerzeichnisArray );
krsort($VerzeichnisArray);
$VerzeichnisArray = array_values($VerzeichnisArray);
rsort($VerzeichnisArray);
return $VerzeichnisArray;
}

Weil die vielen tausend Bilder müssen ja nicht geprüft werden da ich ja nur das Endverzeichnis möchte.
Was meinst du?
Werner schrieb am Samstag, den 23 Oktober 2021 #2
Wie wäre es mit einem anderen Ansatz, zuerst das Array erstellen (die Datumsangaben der Verzeichnisse sind ja bekannt) also "Hauptverzeichnis/Jahr/Monat/Tag". Diese Zeichenkette muss nur durch die entsprechenden Variablen ersetzt werden.
Jan schrieb am Samstag, den 23 Oktober 2021 #3
Danke für deine hilfe.
Habe das ganze mit einem Einzeiler gelöst. Werde sobald ich am PC BIN meine variante posten.
Jan ✶✶✶✶✶ schrieb am Samstag, den 23 Oktober 2021 #4
Das ist meine Lösung:

$VerzeichnisArray = glob($Verzeichnis.'/*/*/*', GLOB_ONLYDIR);