Signatur
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
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);
}
}
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";
}
}
// 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.