Start · Sprachen · PHP · Referenz · svn_ls

svn_ls

Funktion

Listet den Inhalt eines Verzeichnisses in einem SVN-Repository anhand einer Repository-URL auf.

seit PHP 0.1.0 Kategorie: misc

Signatur

svn_ls(string $repos_url, int $revision = SVN_REVISION_HEAD, bool $recurse = false, bool $peg = false): array|false

Beschreibung

svn_ls() gibt die Einträge (Dateien und Unterverzeichnisse) zurück, die sich unter einer angegebenen Subversion-Repository-URL befinden. Die Funktion ist Teil der PECL-Erweiterung svn und bietet eine programmatische Alternative zum Kommandozeilenbefehl svn list.

Der Rückgabewert ist ein Array von assoziativen Arrays, wobei jedes Element Metadaten wie Eintragsname, Revision, Autor, Dateigröße und Datum enthält. Dies eignet sich besonders, wenn Repository-Inhalte dynamisch ausgewertet, verglichen oder in einer Webanwendung angezeigt werden sollen.

Über den Parameter $revision lässt sich ein bestimmter historischer Stand des Repositories abrufen – standardmäßig wird die neueste Revision (SVN_REVISION_HEAD) verwendet. Mit $recurse = true wird der Verzeichnisinhalt rekursiv abgerufen, was bei großen Repositories zu langen Laufzeiten führen kann.

Die Funktion setzt eine funktionierende SVN-Bibliothek (libsvn) und die installierte PECL-Erweiterung svn voraus. Authentifizierung für geschützte Repositories kann über svn_auth_set_parameter() konfiguriert werden.

Parameter

Name Typ Default Beschreibung
$repos_url Pflicht string Die vollständige URL des Repository-Verzeichnisses, das aufgelistet werden soll, z. B. https://svn.example.com/repos/projekt/trunk.
$revision int SVN_REVISION_HEAD Die Revisionsnummer, für die der Verzeichnisinhalt abgerufen werden soll. Standardmäßig wird SVN_REVISION_HEAD (die aktuellste Revision) verwendet.
$recurse bool false Wenn true, wird der Verzeichnisinhalt rekursiv abgerufen, d. h. alle Unterverzeichnisse werden ebenfalls aufgelistet.
$peg bool false Wenn true, wird die angegebene Revisionsnummer als sogenannte Peg-Revision behandelt, die den genauen Pfad im Repository eindeutig identifiziert.

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein numerisch indiziertes Array von assoziativen Arrays. Jedes Element enthält Informationen zum Eintrag: created_rev (Revisionsnummer der letzten Änderung), last_author (Autor der letzten Änderung), size (Dateigröße in Bytes), time (Zeitstempel der letzten Änderung), time_t (Unix-Timestamp), name (Name des Eintrags) und type (Typ: file oder dir). Bei einem Fehler wird false zurückgegeben.

Beispiele

Verzeichnisinhalt des Trunk-Zweigs auflisten

<?php
// SVN-PECL-Erweiterung muss installiert sein
$url = 'https://svn.example.com/repos/meinprojekt/trunk';

$eintraege = svn_ls($url);

if ($eintraege === false) {
    echo 'Fehler beim Abrufen des Repository-Inhalts.';
} else {
    foreach ($eintraege as $eintrag) {
        $typ  = $eintrag['type'] === 'dir' ? '[DIR]' : '[FILE]';
        $name = $eintrag['name'];
        $rev  = $eintrag['created_rev'];
        $autor = $eintrag['last_author'];
        echo sprintf("%s %-30s Rev: %d  Autor: %s\n", $typ, $name, $rev, $autor);
    }
}
[DIR] src Rev: 42 Autor: max [DIR] tests Rev: 41 Autor: max [FILE] README.md Rev: 40 Autor: anna [FILE] composer.json Rev: 38 Autor: anna

Historischen Repository-Stand einer bestimmten Revision abrufen

<?php
// Inhalt des Trunk-Verzeichnisses zum Zeitpunkt von Revision 25 abrufen
$url      = 'https://svn.example.com/repos/meinprojekt/trunk';
$revision = 25;

$eintraege = svn_ls($url, $revision);

if ($eintraege === false) {
    echo 'Konnte Revision ' . $revision . ' nicht abrufen.';
} else {
    echo 'Einträge in Revision ' . $revision . ":\n";
    foreach ($eintraege as $eintrag) {
        echo '- ' . $eintrag['name'] . ' (' . $eintrag['type'] . ")\n";
    }
}
Einträge in Revision 25: - src (dir) - README.md (file)

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Erweiterung svn muss installiert und aktiviert sein (pecl install svn). Diese Erweiterung ist nicht im Standard-PHP-Paket enthalten und muss separat kompiliert oder installiert werden.

Authentifizierung: Bei passwortgeschützten Repositories müssen Zugangsdaten vorab mit svn_auth_set_parameter(SVN_AUTH_PARAM_DEFAULT_USERNAME, '...') und svn_auth_set_parameter(SVN_AUTH_PARAM_DEFAULT_PASSWORD, '...') gesetzt werden, da svn_ls() keine eigenen Authentifizierungsparameter akzeptiert.

Performance: Der Parameter $recurse = true kann bei tief verschachtelten oder großen Repositories zu sehr langen Laufzeiten und hohem Speicherbedarf führen. Für produktive Anwendungen empfiehlt sich ein manuelles, seitenweises Traversieren.

Fehlerbehandlung: Bei ungültiger URL, Netzwerkfehlern oder fehlenden Berechtigungen gibt die Funktion false zurück. Eine Prüfung des Rückgabewerts ist daher immer empfehlenswert.