Start · Sprachen · PHP · Referenz · svn_checkout

svn_checkout

Funktion

Checkt eine Arbeitskopie eines Subversion-Repositories in ein lokales Verzeichnis aus.

seit PHP 0.1.0 Kategorie: misc

Signatur

svn_checkout(string $repos, string $targetpath, int $revision = SVN_REVISION_HEAD, int $flags = 0): bool

Beschreibung

svn_checkout() ist Teil der PECL-Erweiterung svn und ermöglicht es, eine Arbeitskopie eines SVN-Repositories in ein angegebenes lokales Verzeichnis auszuchecken. Dies entspricht dem Befehl svn checkout auf der Kommandozeile.

Die Funktion eignet sich für automatisierte Build- oder Deployment-Prozesse, bei denen PHP-Skripte direkt mit einem Subversion-Repository interagieren müssen, ohne externe Shell-Befehle ausführen zu müssen. Typische Anwendungsfälle sind CI/CD-Pipelines, automatische Code-Deployments oder Versionsverwaltungs-Werkzeuge.

Mit dem Parameter $revision lässt sich eine bestimmte Revision auschecken; standardmäßig wird die neueste Revision (SVN_REVISION_HEAD) verwendet. Der Parameter $flags erlaubt es, das Verhalten durch Konstanten wie SVN_NON_RECURSIVE anzupassen.

Hinweis: Die PECL-Erweiterung svn muss auf dem Server installiert und aktiviert sein. Unter Linux wird dazu typischerweise das Paket php-svn oder libsvn-php benötigt.

Parameter

Name Typ Default Beschreibung
$repos Pflicht string Die URL des Subversion-Repositories, z. B. https://example.com/svn/myproject/trunk oder ein lokaler file:///-Pfad.
$targetpath Pflicht string Der lokale Verzeichnispfad, in den die Arbeitskopie ausgecheckt werden soll. Das Verzeichnis muss beschreibbar sein.
$revision int SVN_REVISION_HEAD Die Revisionsnummer, die ausgecheckt werden soll. Standardmäßig wird die aktuelle HEAD-Revision verwendet. Kann eine beliebige gültige Revisionsnummer oder die Konstante SVN_REVISION_HEAD sein.
$flags int 0 Optionale Flags zur Steuerung des Verhaltens. Mögliche Werte sind z. B. SVN_NON_RECURSIVE, um nur die oberste Ebene auszuchecken, ohne Unterverzeichnisse zu rekursieren.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Checkout erfolgreich war, andernfalls false. Im Fehlerfall können zusätzliche Informationen über svn_last_error() abgerufen werden.

Beispiele

Einfacher Checkout der HEAD-Revision

<?php
// Subversion-Repository in lokales Verzeichnis auschecken
$repoUrl    = 'https://svn.example.com/repos/myproject/trunk';
$localPath  = '/var/www/deployments/myproject';

if (svn_checkout($repoUrl, $localPath)) {
    echo "Checkout erfolgreich nach: $localPath\n";
} else {
    $error = svn_last_error();
    echo "Fehler beim Checkout: " . $error['message'] . "\n";
}
Checkout erfolgreich nach: /var/www/deployments/myproject

Checkout einer bestimmten Revision ohne Rekursion

<?php
// Nur Revision 42 auschecken, ohne Unterverzeichnisse zu rekursieren
$repoUrl   = 'https://svn.example.com/repos/myproject/trunk';
$localPath = '/tmp/svn_checkout_r42';
$revision  = 42;

if (!is_dir($localPath)) {
    mkdir($localPath, 0755, true);
}

$result = svn_checkout($repoUrl, $localPath, $revision, SVN_NON_RECURSIVE);

if ($result) {
    echo "Revision $revision wurde erfolgreich ausgecheckt.\n";
} else {
    echo "Checkout fehlgeschlagen.\n";
}
Revision 42 wurde erfolgreich ausgecheckt.

// Wichtig · Fallstricke

Sicherheitshinweis: Wenn Repository-URLs oder Pfade aus Benutzereingaben stammen, müssen diese unbedingt validiert und bereinigt werden, um Path-Traversal-Angriffe oder das Auschecken unerwünschter Repositories zu verhindern.

Verfügbarkeit: svn_checkout() ist keine eingebaute PHP-Funktion, sondern Teil der PECL-Erweiterung svn. Sie muss separat installiert werden (pecl install svn). Die Verfügbarkeit hängt von der installierten Version der APR-SVN-Bibliotheken ab.

Berechtigungen: Der PHP-Prozess benötigt ausreichende Schreibrechte auf $targetpath. Für geschützte Repositories müssen Authentifizierungsdaten vorab über svn_auth_set_parameter() konfiguriert werden.

Performance: Bei großen Repositories kann der Checkout erhebliche Zeit und Ressourcen beanspruchen. Für Produktionsumgebungen empfiehlt sich ggf. ein erhöhtes max_execution_time.