Start · Sprachen · PHP · Referenz · ssh2_sftp_mkdir

ssh2_sftp_mkdir

Funktion

Erstellt ein Verzeichnis auf einem entfernten Server über eine SFTP-Verbindung.

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_sftp_mkdir(resource $sftp, string $filename, int $mode = 0777, bool $recursive = false): bool

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

Typ
bool
Beschreibung
Gibt 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.";
}
?>
Verzeichnis erfolgreich erstellt.

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.";
}
?>
Verzeichnisstruktur erfolgreich erstellt: /home/benutzer/projekte/2024/januar/daten

// 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.