Ordnerstruktur abbilden

Hey
ich versuche grade verschiedene, ineinander liegende Ordner mit ihrem Inhalt (Dateien) abzubilden. Also Praktisch ein Dateibaum.

Ich habe es bisher mit glob() und dem herkömmlichen readdir() - opendir(). Allerdings bekomme ich wechselseitig entweder Fehler ohne Ende oder er macht nich was ich möchte.

Kann mir bitte Jemand einen Denkanstoß (am Besten mit Codebeispiel) geben. Wäre echt suuper.

lg & Danke im Vorraus

Der RecursiveDirectoryIterator ist für so etwas hervorragend geeignet: PHP: RecursiveDirectoryIterator - Manual

Hey
erstamal danke für die Antwort!
RecursiveDirectoryIterator ist schonmal super. Mein Ziel ist es ein Mehrdimensionales Array zu bekommen wo alle Ordner und Dateien in der richtigen Hirachie vorhande sind.
Bsp.:

array( ordner1[] => array ( ordner2[] => array ( order3[] => array ( dateiX dateiY ) dateiA dateiB ) datei1 datei2 datei3 datei4 ) )Mein bisheriger Versuch schafft das ganze auf erster Ebene. Mir fällt einfach nichts ein, wie ich es mit folgenden mache könnte.

Mein bisheriger Code:

[CODE]<?php
$path = ‚./content‘;

$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
$ordner = array();
foreach($objects as $file => $objekt)
{
$file = str_replace(„./content/“, „“, $file);
if(strstr($file, „.“) == false)
{
$ordner[$file] = glob(„./content/“.$file.„/*“);
}
}
print_r($ordner);
?>[/CODE]lg & Danke im Vorraus!

Hey
habe mich nochmal dran gesetzt und eine weitere Möglichkeit gefunden:

<?php $path = './content/'; $baum = glob($path."*"); $anzahl = count($baum); $num = 0; while($num < $anzahl) { if(is_dir($baum[$num])) { $baum[$baum[$num]] = glob($baum[$num]."/*"); // $anzahl1 = count($baum[$baum[$num]]); $num1 = 0; while($num1 < $anzahl1) { if(is_dir($baum[$baum[$num]][$num1])) { $baum[$baum[$num]][$baum[$baum[$num]][$num1]] = glob($baum[$baum[$num]][$num1]."/*"); $baum[$baum[$num]][$num1] = false; } $num1++; } // $baum[$num] = false; } $num++; } print_r($baum); ?>
Dies funktioniert zwar ganz gut - allerdings muss für jede Ebene ein riesiger Aufwand getrieben werden (bisher hab ich das ganze nur für 2 Ebenen geschrieben. Ca. 10 weiter müssten noch folgen). Kennt jemand eine einfachere variante?

[PHP]<?php
$path = realpath(‚…/Bilder‘);

$objects = new RecursiveDirectoryIterator($path, FilesystemIterator::CURRENT_AS_SELF | FilesystemIterator::SKIP_DOTS);

function listDir ($iterator) {
$list = array();
foreach ($iterator as $file) {

    if ($file->isDir()) {
        $list[$file->getSubPathName()] = array();

        if ($file->hasChildren()) {
            $childs = $file->getChildren();
            $list[$file->getSubPathName()] = listDir($childs);
        }
    } elseif($file->isFile()) {
        $list[] = basename($file->key()); 
    }
}
return $list;

};

$directories = listDir($objects);
print_r($directories);[/PHP]

@crash: „Fatal error: Call to undefined method SplFileInfo::getSubPathName() in /X/X/XX/XX/ on line 22“. Das ist die Zeile „$list = basename($file->key());“

probier’s mal mit getSubPathname() oder getSubPath()

nö…gibt beides auch fehler…

Welche PHP-Version?

[SIZE=3]PHP Version 5.2.11[/SIZE]

Dann musst du das mal Debuggen. Bei mir unte PHP 5.3.3 läuft es.

und tatsächlich: Ab PHP 5.3 läuft es einwandfrei. Werde mich mal in objektorientiertes PHP soweit einlesen, dass ich auch verstehe was da genau passiert :slight_smile:

Vielen Dank!