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