Signatur
Beschreibung
svn_status() ist Teil der PECL-Erweiterung svn und liefert Informationen über den aktuellen Zustand von Dateien und Verzeichnissen in einer lokalen SVN-Arbeitskopie. Die Funktion entspricht dem Kommandozeilenbefehl svn status und gibt zurück, welche Dateien verändert, hinzugefügt, gelöscht, in Konflikt oder nicht versioniert sind.
Das zurückgegebene Array enthält für jede betroffene Datei einen Eintrag mit Statusinformationen wie dem Textänderungsstatus, dem Eigenschaftsstatus sowie dem Pfad relativ zum übergebenen Verzeichnis. Nicht veränderte, versionierte Dateien werden in der Standardausgabe üblicherweise nicht aufgeführt, es sei denn, entsprechende Flags werden gesetzt.
Mit dem Parameter $flags lässt sich das Verhalten steuern: So kann z. B. mit SVN_ALL auch der Status unveränderter Dateien abgefragt werden, oder mit SVN_SHOW_UPDATES geprüft werden, ob im Repository neuere Revisionen vorhanden sind. Die Funktion ist nützlich in Build-Systemen, Deployment-Skripten oder Tools, die SVN-Repositories automatisiert verwalten.
Hinweis: Diese Funktion setzt die Installation der PECL-Erweiterung svn voraus (pecl install svn). Sie steht nur zur Verfügung, wenn PHP mit dieser Erweiterung kompiliert oder diese nachträglich geladen wurde.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Absoluter oder relativer Pfad zur lokalen SVN-Arbeitskopie oder zu einer einzelnen Datei, deren Status ermittelt werden soll. | |
| $flags | int | SVN_NON_RECURSIVE | Optionale Steuerkonstanten, z. B. SVN_ALL (alle Dateien anzeigen), SVN_SHOW_UPDATES (Repository-Updates einbeziehen) oder SVN_RECURSIVE (rekursiver Durchlauf). Mehrere Flags lassen sich mit dem bitweisen ODER-Operator (|) kombinieren. |
Rückgabewert
path (Dateipfad), text_status (Textänderungsstatus als Integer), prop_status (Eigenschaftsstatus) und ggf. repos_text_status bei gesetztem SVN_SHOW_UPDATES. Statuswerte entsprechen den SVN-Statuskonstanten wie SVN_WC_STATUS_MODIFIED, SVN_WC_STATUS_ADDED etc. Bei einem Fehler wird false zurückgegeben.Beispiele
Geänderte Dateien einer Arbeitskopie auflisten
<?php
// Voraussetzung: PECL-Erweiterung 'svn' ist installiert
$path = '/var/www/mein-projekt';
$status = svn_status($path, SVN_RECURSIVE);
if ($status === false) {
echo 'Fehler beim Abrufen des SVN-Status.' . PHP_EOL;
exit(1);
}
if (empty($status)) {
echo 'Keine Änderungen in der Arbeitskopie.' . PHP_EOL;
} else {
foreach ($status as $eintrag) {
$textStatus = $eintrag['text_status'];
$datei = $eintrag['path'];
switch ($textStatus) {
case SVN_WC_STATUS_MODIFIED:
echo "Geändert: $datei" . PHP_EOL;
break;
case SVN_WC_STATUS_ADDED:
echo "Hinzugefügt: $datei" . PHP_EOL;
break;
case SVN_WC_STATUS_DELETED:
echo "Gelöscht: $datei" . PHP_EOL;
break;
case SVN_WC_STATUS_CONFLICTED:
echo "Konflikt: $datei" . PHP_EOL;
break;
default:
echo "Status $textStatus: $datei" . PHP_EOL;
}
}
}
Status mit Repository-Vergleich abfragen
<?php
// SVN_SHOW_UPDATES prüft auch, ob neuere Revisionen im Repository existieren
$path = '/var/www/mein-projekt';
$status = svn_status($path, SVN_RECURSIVE | SVN_SHOW_UPDATES);
if ($status === false) {
echo 'SVN-Statusabfrage fehlgeschlagen.' . PHP_EOL;
exit(1);
}
foreach ($status as $eintrag) {
$lokal = $eintrag['text_status'];
$remote = $eintrag['repos_text_status'] ?? SVN_WC_STATUS_NONE;
$datei = $eintrag['path'];
if ($remote === SVN_WC_STATUS_MODIFIED) {
echo "Update verfügbar: $datei" . PHP_EOL;
}
if ($lokal === SVN_WC_STATUS_MODIFIED) {
echo "Lokal geändert: $datei" . PHP_EOL;
}
}
// Wichtig · Fallstricke
PECL-Abhängigkeit: svn_status() ist keine eingebaute PHP-Funktion, sondern Teil der PECL-Erweiterung svn. Diese muss separat installiert werden und ist nicht auf allen Hostingsystemen verfügbar. Unter Linux kann sie mit pecl install svn und den passenden libsvn-dev-Paketen installiert werden.
Kompatibilität: Die Erweiterung unterstützt primär PHP 5.x und ältere 7.x-Versionen. Unter PHP 8.x kann es zu Inkompatibilitäten kommen – vor dem Einsatz in modernen PHP-Versionen sollte die Kompatibilität der installierten PECL-Version geprüft werden.
Sicherheit: Der Pfad $path sollte niemals direkt aus Benutzereingaben übernommen werden, da dies Path-Traversal-Angriffe ermöglichen kann. Eingaben stets validieren und auf erlaubte Verzeichnisse beschränken.
Alternativen: Für moderne Projekte empfiehlt sich die Verwendung von proc_open() mit dem svn-Kommandozeilenwerkzeug oder eine dedizierte SVN-Bibliothek, da die PECL-Erweiterung kaum noch aktiv gepflegt wird.