Signatur
Beschreibung
ssh2_sftp_mkdir() legt ein neues Verzeichnis auf einem entfernten SSH2-Server über das SFTP-Subsystem an. Die Funktion verhält sich ähnlich wie die lokale PHP-Funktion mkdir(), arbeitet jedoch über eine bestehende SFTP-Ressource, die zuvor mit ssh2_sftp() erzeugt wurde.
Mit dem Parameter $mode lassen sich die Unix-Dateiberechtigungen des neuen Verzeichnisses festlegen (z. B. 0755 für Lese- und Ausführungsrechte für Gruppe und andere). Ob der Server die angegebenen Berechtigungen tatsächlich übernimmt, hängt von der Server-Konfiguration und der Umask ab.
Wenn der Parameter $recursive auf true gesetzt wird, werden alle fehlenden übergeordneten Verzeichnisse automatisch mit angelegt — ähnlich dem Unix-Befehl mkdir -p. Dies ist besonders nützlich, wenn tiefe Verzeichnisstrukturen in einem einzigen Aufruf erstellt werden sollen.
Die Funktion gehört zur PECL-Erweiterung ssh2 und ist daher nicht im PHP-Kern enthalten. Sie muss separat installiert und aktiviert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $sftp Pflicht | resource | Eine SFTP-Ressource, die mit ssh2_sftp() auf Basis einer SSH2-Verbindung erzeugt wurde. |
|
| $filename Pflicht | string | Der absolute Pfad des zu erstellenden Verzeichnisses auf dem entfernten Server, z. B. /home/user/neues_verzeichnis. |
|
| $mode | int | 0777 | Unix-Dateiberechtigungen als oktale Zahl, z. B. 0755. Der tatsächlich gesetzte Wert kann durch die Server-Umask beeinflusst werden. |
| $recursive | bool | false | Wenn true, werden alle fehlenden übergeordneten Verzeichnisse automatisch miterstellt (entspricht mkdir -p). |
Rückgabewert
true zurück, wenn das Verzeichnis erfolgreich erstellt wurde, andernfalls false. Im Fehlerfall wird zusätzlich eine PHP-Warnung ausgegeben.Beispiele
Einfaches Verzeichnis auf einem Remote-Server erstellen
<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheim');
$sftp = ssh2_sftp($connection);
if (ssh2_sftp_mkdir($sftp, '/home/benutzer/neues_verzeichnis', 0755)) {
echo "Verzeichnis erfolgreich erstellt.";
} else {
echo "Fehler beim Erstellen des Verzeichnisses.";
}
?>
Verschachtelte Verzeichnisstruktur rekursiv erstellen
<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheim');
$sftp = ssh2_sftp($connection);
$pfad = '/home/benutzer/projekte/2024/januar/daten';
if (ssh2_sftp_mkdir($sftp, $pfad, 0755, true)) {
echo "Verzeichnisstruktur erfolgreich erstellt: " . $pfad;
} else {
echo "Fehler beim Erstellen der Verzeichnisstruktur.";
}
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Verwende niemals vom Benutzer kontrollierte Eingaben direkt als Verzeichnispfad ($filename), ohne diese zuvor zu validieren und zu bereinigen. Pfadtraversierungen wie ../../etc können sicherheitsrelevante Verzeichnisse auf dem Remote-Server gefährden.
PECL-Abhängigkeit: Die Funktion ist Teil der PECL-Erweiterung ssh2 (libssh2). Diese muss separat über PECL installiert und in der php.ini aktiviert werden (extension=ssh2.so). Prüfe die Verfügbarkeit mit function_exists('ssh2_sftp_mkdir').
Pfadangabe: Es sollten immer absolute Pfade übergeben werden. Relative Pfade können je nach Server-Konfiguration und aktuellem Arbeitsverzeichnis der SFTP-Session zu unerwarteten Ergebnissen führen.