Signatur
Beschreibung
svn_mkdir() ist Teil der PECL-Erweiterung svn und legt ein neues Verzeichnis unter dem angegebenen Pfad an — entweder in einer lokalen Arbeitskopie (Working Copy) oder direkt in einem Subversion-Repository über eine Repository-URL (svn+ssh://, http://, file:// usw.).
Wird ein lokaler Pfad übergeben, entspricht dies dem SVN-Kommando svn mkdir <pfad> ohne sofortigen Commit — das Verzeichnis wird nur zur Versionsverwaltung vorgemerkt. Wird eine Repository-URL angegeben, wird das Verzeichnis direkt im Repository angelegt; in diesem Fall ist der Parameter log_message zwingend erforderlich, da ohne Commit-Nachricht der Vorgang fehlschlägt.
Die Funktion ist nützlich, wenn PHP-Anwendungen automatisiert Repository-Strukturen aufbauen oder Verzeichnisse im Rahmen eines Deployment- oder Build-Prozesses anlegen müssen, ohne auf die Kommandozeile zurückgreifen zu müssen.
Beachte, dass die svn-Erweiterung über PECL installiert werden muss und nicht standardmäßig in PHP enthalten ist. Außerdem muss auf dem Server eine kompatible Subversion-Bibliothek (libsvn) vorhanden sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Lokaler Dateisystempfad innerhalb einer Arbeitskopie oder eine vollständige Repository-URL. Bei einer URL wird das Verzeichnis sofort im Repository erstellt und erfordert eine log_message. |
|
| $log_message | string | Commit-Nachricht, die beim direkten Anlegen im Repository verwendet wird. Bei lokalen Pfaden wird dieser Parameter ignoriert; bei Repository-URLs ist er praktisch verpflichtend, da viele Server leere Commit-Nachrichten ablehnen. |
Rückgabewert
true zurück, wenn das Verzeichnis erfolgreich erstellt wurde, andernfalls false. Im Fehlerfall (z. B. Pfad existiert bereits, fehlende Berechtigungen, ungültige URL) wird zusätzlich ein PHP-Fehler ausgegeben.Beispiele
Verzeichnis in lokaler Arbeitskopie anlegen
<?php
// Voraussetzung: PECL-Erweiterung "svn" ist geladen
$workingCopyPath = '/var/www/mein-projekt/trunk/neuer-ordner';
if (svn_mkdir($workingCopyPath)) {
echo "Verzeichnis erfolgreich in der Arbeitskopie erstellt.\n";
echo "Führe jetzt svn_commit() aus, um es ins Repository zu übernehmen.";
} else {
echo "Fehler beim Erstellen des Verzeichnisses.";
}
Verzeichnis direkt im Repository anlegen (URL)
<?php
// Direktes Anlegen im Repository über URL — kein Checkout nötig
$repoUrl = 'svn+ssh://svn.example.com/repos/mein-projekt/branches/feature-xyz';
$logMessage = 'Neuen Feature-Branch-Ordner angelegt';
if (svn_mkdir($repoUrl, $logMessage)) {
echo "Verzeichnis im Repository erfolgreich erstellt.";
} else {
echo "Fehler: Verzeichnis konnte nicht erstellt werden.\n";
echo "Prüfe URL, Berechtigungen und ob das Verzeichnis bereits existiert.";
}
// Wichtig · Fallstricke
Sicherheitshinweis: Werden Pfade oder URLs aus Benutzereingaben zusammengebaut, müssen diese sorgfältig validiert und bereinigt werden, um Path-Traversal-Angriffe (../) oder das Anlegen unerwünschter Verzeichnisse im Repository zu verhindern.
PECL-Abhängigkeit: Die svn-Erweiterung ist nicht Bestandteil der PHP-Kerninstallation. Sie muss separat via PECL (pecl install svn) installiert und in der php.ini aktiviert werden. Auf modernen Systemen kann die Kompatibilität mit neueren PHP-Versionen eingeschränkt sein — prüfe die PECL-Seite auf aktuelle Unterstützung.
Wenn das Verzeichnis an einer Repository-URL bereits existiert, schlägt der Aufruf fehl. Eine Überprüfung via svn_info() vor dem Aufruf kann unnötige Fehler vermeiden.