Start · Sprachen · PHP · Referenz · svn_status

svn_status

Funktion

Gibt den Status von Dateien und Verzeichnissen einer Subversion-Arbeitskopie zurück.

seit PHP 0.1.0 Kategorie: misc

Signatur

svn_status(string $path, int $flags = SVN_NON_RECURSIVE): array|false

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

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array zurück, wobei jedes Element ein assoziatives Array mit Informationen zu einer Datei ist. Typische Schlüssel sind 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;
        }
    }
}
Geändert: /var/www/mein-projekt/src/index.php Hinzugefügt: /var/www/mein-projekt/src/neu.php

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;
    }
}
Update verfügbar: /var/www/mein-projekt/config/settings.php Lokal geändert: /var/www/mein-projekt/src/index.php

// 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.