Signatur
Beschreibung
svn_delete() markiert eine Datei oder ein Verzeichnis in einer lokalen SVN-Arbeitskopie zur Löschung (ähnlich dem Befehl svn delete auf der Kommandozeile) oder löscht ein Element direkt aus einem Repository-URL. Nach dem Aufruf auf einer Arbeitskopie muss die Änderung noch mit svn_commit() übertragen werden, damit sie dauerhaft im Repository wirksam wird.
Wenn $path eine Arbeitskopienpfad ist, wird die Datei oder das Verzeichnis als gelöscht vorgemerkt. Ist $path hingegen eine Repository-URL (beginnend mit z. B. http://, svn:// oder file:///), wird das Element sofort und direkt im Repository gelöscht, ohne dass ein separater Commit notwendig ist.
Der optionale Parameter $force erzwingt die Löschung auch dann, wenn die Datei lokal verändert wurde oder noch nicht eingecheckte Änderungen enthält. Ohne $force schlägt der Aufruf bei solchen Dateien fehl, um versehentlichen Datenverlust zu vermeiden.
Diese Funktion gehört zur PECL-Extension svn und steht nur zur Verfügung, wenn diese Extension installiert und aktiviert ist. Sie ist besonders nützlich in automatisierten Build- oder Deployment-Skripten, die SVN-Repositories programmatisch verwalten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Pfad zu einer Datei oder einem Verzeichnis in einer lokalen Arbeitskopie oder eine Repository-URL. Bei einer URL wird das Element sofort im Repository gelöscht. | |
| $force | bool | false | Wenn true, wird die Löschung auch bei lokal veränderten oder nicht eincheckten Dateien erzwungen. Standardmäßig false, um versehentlichen Datenverlust zu verhindern. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn der Pfad nicht existiert, nicht versioniert ist oder die Datei lokal geändert wurde und $force nicht gesetzt ist).Beispiele
Datei in lokaler Arbeitskopie zur Löschung vormerken
<?php
// Arbeitskopie liegt unter /var/www/mein-projekt
$pfad = '/var/www/mein-projekt/veraltete-datei.txt';
if (svn_delete($pfad)) {
echo "Datei erfolgreich zur Löschung vorgemerkt.\n";
// Jetzt den Commit durchführen, um die Löschung ins Repository zu übertragen
$ergebnis = svn_commit('Veraltete Datei entfernt', ['/var/www/mein-projekt']);
if ($ergebnis) {
echo "Commit erfolgreich. Revision: " . $ergebnis['revision'] . "\n";
} else {
echo "Commit fehlgeschlagen.\n";
}
} else {
echo "Fehler beim Vormerken der Löschung.\n";
}
?>
Direktes Löschen eines Elements über Repository-URL
<?php
// Direktes Löschen aus dem Repository (kein separater Commit nötig)
$repoUrl = 'svn://localhost/mein-repo/trunk/veraltetes-verzeichnis';
if (svn_delete($repoUrl)) {
echo "Verzeichnis direkt aus dem Repository gelöscht.\n";
} else {
echo "Fehler beim Löschen aus dem Repository.\n";
}
?>
Erzwungenes Löschen einer lokal veränderten Datei
<?php
// Eine lokal veränderte Datei soll trotzdem gelöscht werden
$pfad = '/var/www/mein-projekt/geaenderte-datei.php';
if (svn_delete($pfad, true)) {
echo "Datei wurde erzwungen zur Löschung vorgemerkt.\n";
} else {
echo "Fehler beim erzwungenen Löschen.\n";
}
?>
// Wichtig · Fallstricke
Achtung: Beim Einsatz von $force = true gehen alle lokalen, noch nicht übertragenen Änderungen an der betroffenen Datei unwiederbringlich verloren. Dieser Parameter sollte daher nur mit Bedacht eingesetzt werden.
Die Funktion erfordert die PECL-Extension svn (pecl.php.net/package/svn), die nicht standardmäßig in PHP enthalten ist und separat installiert werden muss. Auf vielen Systemen ist diese Extension nicht verfügbar; prüfe die Verfügbarkeit mit extension_loaded('svn').
Bei der Übergabe von Repository-URLs aus Benutzereingaben ist besondere Vorsicht geboten, da ansonsten unerwünschte Repository-Inhalte gelöscht werden könnten. Eingaben sollten stets validiert und auf erlaubte Pfade eingeschränkt werden.