Start · Sprachen · PHP · Referenz · svn_fs_dir_entries

svn_fs_dir_entries

Funktion

Listet alle Einträge (Dateien und Unterverzeichnisse) eines Verzeichnisses in einem Subversion-Dateisystem-Wurzelobjekt auf.

Kategorie: misc

Signatur

svn_fs_dir_entries(resource $fsroot, string $path): array|false

Beschreibung

svn_fs_dir_entries() gibt alle Einträge zurück, die sich in einem Verzeichnis befinden, das durch den Pfad $path im Dateisystem-Wurzelobjekt $fsroot identifiziert wird. Das Wurzelobjekt wird typischerweise mit Hilfe von svn_fs_revision_root() oder svn_fs_txn_root() erstellt und repräsentiert einen bestimmten Revisionsstand des SVN-Repositories.

Der Rückgabewert ist ein assoziatives Array, bei dem die Schlüssel die Namen der Einträge (Datei- oder Verzeichnisnamen) sind und die Werte den Typ des jeweiligen Eintrags beschreiben (z. B. SVN_NODE_FILE für Dateien oder SVN_NODE_DIR für Verzeichnisse).

Diese Funktion ist besonders nützlich, wenn man den Inhalt eines SVN-Repositories programmatisch auslesen, traversieren oder analysieren möchte, ohne das Repository lokal auszuchecken. Sie gehört zur Low-Level-SVN-Dateisystem-API der svn-PHP-Erweiterung.

Zu beachten ist, dass die svn-Erweiterung (PECL svn) separat installiert werden muss und nicht standardmäßig in PHP enthalten ist. Die Funktionen dieser Erweiterung arbeiten direkt mit dem Subversion-Repository-Backend und sind daher deutlich effizienter als das Ausführen von Shell-Befehlen.

Parameter

Name Typ Default Beschreibung
$fsroot Pflicht resource Ein Dateisystem-Wurzel-Ressource, wie sie von svn_fs_revision_root() oder svn_fs_txn_root() zurückgegeben wird. Repräsentiert einen bestimmten Revisionsstand des SVN-Repositories.
$path Pflicht string Der Pfad innerhalb des SVN-Dateisystems, dessen Einträge aufgelistet werden sollen. Der Pfad muss auf ein Verzeichnis zeigen (z. B. /trunk oder /branches/feature-x).

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, bei dem die Schlüssel die Namen der Einträge (Datei- oder Verzeichnisnamen) sind und die Werte den Knotentyp angeben (SVN_NODE_FILE für Dateien, SVN_NODE_DIR für Verzeichnisse). Bei einem Fehler wird false zurückgegeben.

Beispiele

Verzeichniseinträge einer SVN-Revision auflisten

<?php
// Repository öffnen
$repo = svn_repos_open('/var/svn/myrepo');

// Dateisystem-Objekt holen
$fs = svn_repos_fs($repo);

// Wurzelobjekt für die neueste Revision erstellen
$latestRev = svn_fs_youngest_rev($fs);
$fsroot = svn_fs_revision_root($fs, $latestRev);

// Einträge im /trunk-Verzeichnis auflisten
$entries = svn_fs_dir_entries($fsroot, '/trunk');

if ($entries === false) {
    echo "Fehler beim Lesen der Verzeichniseinträge.\n";
} else {
    foreach ($entries as $name => $type) {
        $typeLabel = ($type === SVN_NODE_DIR) ? 'Verzeichnis' : 'Datei';
        echo "[$typeLabel] $name\n";
    }
}
?>
[Verzeichnis] src [Verzeichnis] tests [Datei] README.md [Datei] composer.json

Rekursives Traversieren des SVN-Dateisystems

<?php
function listSvnEntries(resource $fsroot, string $path, int $depth = 0): void {
    $entries = svn_fs_dir_entries($fsroot, $path);
    if ($entries === false) {
        return;
    }
    foreach ($entries as $name => $type) {
        $indent = str_repeat('  ', $depth);
        if ($type === SVN_NODE_DIR) {
            echo "{$indent}[DIR]  {$name}/\n";
            listSvnEntries($fsroot, rtrim($path, '/') . '/' . $name, $depth + 1);
        } else {
            echo "{$indent}[FILE] {$name}\n";
        }
    }
}

$repo   = svn_repos_open('/var/svn/myrepo');
$fs     = svn_repos_fs($repo);
$rev    = svn_fs_youngest_rev($fs);
$fsroot = svn_fs_revision_root($fs, $rev);

listSvnEntries($fsroot, '/trunk');
?>
[DIR] src/ [FILE] index.php [FILE] App.php [DIR] tests/ [FILE] AppTest.php [FILE] README.md [FILE] composer.json

// Wichtig · Fallstricke

Wichtig: Diese Funktion ist Teil der PECL-Erweiterung svn, die separat installiert werden muss (z. B. via pecl install svn). Sie steht nicht in Standard-PHP-Installationen zur Verfügung.

Der angegebene $path muss im SVN-Dateisystem auf ein Verzeichnis zeigen. Wird ein Pfad angegeben, der auf eine Datei oder einen nicht existierenden Knoten verweist, gibt die Funktion false zurück oder verhält sich undefiniert. Zur Überprüfung des Knotentyps kann vorher svn_fs_check_path() verwendet werden.

Bei tief verschachtelten Verzeichnisstrukturen und rekursiver Traversierung ist auf ausreichend großen Arbeitsspeicher und gegebenenfalls eine Begrenzung der Rekursionstiefe zu achten, um Stack-Overflows zu vermeiden.