Einzelnen Beitrag anzeigen
  #2 (permalink)  
Alt 06-01-2020, 13:42
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 280
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Da Du ohnehin mit PHP 7.3 arbeitest, könntest Du Dir auch die entsprechenden Iterator Klassen dazu mal ansehen. Mittels der PHP eigenen Klasse RecursiveDirectoryIterator und der RecursiveCallbackFilterIterator Klasse könnte es eventuell funktionieren. Du kannst mittels der FileSystemIterator Klasse festlegen, dass auch Symlinks gefolgt werden soll.

Als Basis hierfür müsstest einen Symlink (Alias) in dem Verzeichnis ablegen, in dem Dein PHP Skript ausgeführt wird. Der initialisierte Iterator folgt dann den Verzeichnissen, liest alle Inhalte dieser Vezeichnisse aus und erzeugt zu jeder Datei und zu jedem relevaten Verzeichnis ein SplFileInfo Objekt.

Der CallbackFilter ist notwendig, um den technischen Aufwand so gering wie möglich zu halten. Du kannst mit dem Filter festlegen, dass Du Bilddateien und die relevanten Verzeichnisse ausgelesen werden. Du könntest im Filter ebenfalls definieren, welche Verzeichnisse nicht ausgelesen werden sollen.

PHP-Code:
$directory = new RecursiveDirectoryIterator('bilder'FilesystemIterator::FOLLOW_SYMLINKS);
$filter = new RecursiveCallbackFilterIterator($directory, function($current$key$iterator) {
    
// Versteckte Dateien und Verzeichnisse nicht beachten
    
if ($current->getFilename()[0] === '.') {
        return 
FALSE;
    }
  
    
// relevante Unterverzeichnisse beachten
    
if ($current->isDir()) {
        return 
true;
    } 

    
// relevante Dateien beachten
    
else {
        return 
in_array($current->getExtension(), [ 'jpg''png' ]);
    }
});

$files = array();
$iterator = new RecursiveIteratorIterator($filter);

foreach (
$iterator as $info) {
    
$files[] = $info->getPathname();

Da Du von einer relativ großen Menge an Dateien und Verzeichnissen gesprochen hast, macht es eventuell Sinn die Dateien über ein yield() zu prozessieren, um den Speicherverbrauch so gering wie möglich zu halten.

Ich hoffe Du kannst mit diesem doch eher objektorientiertem Ansatz etwas anfangen. Bei Fragen einfach fragen.
__________________
MM Newmedia | MeinBlog
Mit Zitat antworten