Signatur
Beschreibung
ssh2_sftp_rmdir() löscht ein Verzeichnis auf dem entfernten SSH2/SFTP-Server. Die Funktion entspricht dem UNIX-Befehl rmdir und kann ausschließlich leere Verzeichnisse entfernen. Enthält das Verzeichnis noch Dateien oder Unterverzeichnisse, schlägt der Aufruf fehl.
Um die Funktion zu nutzen, muss zunächst eine SSH2-Verbindung mit ssh2_connect() hergestellt und authentifiziert werden. Anschließend wird eine SFTP-Ressource mit ssh2_sftp() erzeugt, die als erster Parameter übergeben wird.
Soll ein nicht-leeres Verzeichnis entfernt werden, müssen zunächst alle enthaltenen Dateien und Unterverzeichnisse rekursiv gelöscht werden, bevor ssh2_sftp_rmdir() aufgerufen wird.
Diese Funktion gehört zur PECL-Erweiterung ssh2, die separat installiert werden muss und nicht standardmäßig in PHP enthalten ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $sftp Pflicht | resource | Eine SFTP-Ressource, die zuvor mit ssh2_sftp() auf Basis einer bestehenden SSH2-Verbindung erzeugt wurde. |
|
| $dirname Pflicht | string | Der absolute Pfad zum Verzeichnis auf dem entfernten Server, das entfernt werden soll. Das Verzeichnis muss leer sein. |
Rückgabewert
true zurück, wenn das Verzeichnis erfolgreich entfernt wurde, andernfalls false. Ein Fehlschlag tritt z. B. auf, wenn das Verzeichnis nicht leer ist, nicht existiert oder die Berechtigungen fehlen.Beispiele
Leeres Verzeichnis auf Remote-Server entfernen
<?php
// SSH2-Verbindung herstellen
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
die('Verbindung fehlgeschlagen');
}
// Authentifizierung mit Benutzername und Passwort
if (!ssh2_auth_password($connection, 'benutzer', 'geheimespasswort')) {
die('Authentifizierung fehlgeschlagen');
}
// SFTP-Ressource erzeugen
$sftp = ssh2_sftp($connection);
if (!$sftp) {
die('SFTP-Initialisierung fehlgeschlagen');
}
// Leeres Verzeichnis entfernen
$verzeichnis = '/var/www/html/temp_ordner';
if (ssh2_sftp_rmdir($sftp, $verzeichnis)) {
echo "Verzeichnis '$verzeichnis' erfolgreich entfernt.";
} else {
echo "Fehler: Verzeichnis konnte nicht entfernt werden.";
}
?>
Rekursives Löschen eines nicht-leeren Verzeichnisses über SFTP
<?php
function sftp_rmdir_recursive(resource $sftp, string $pfad): bool {
// Verzeichnisinhalt über SSH2-Stream-Wrapper lesen
$handle = opendir('ssh2.sftp://' . intval($sftp) . $pfad);
if (!$handle) {
return false;
}
while (false !== ($eintrag = readdir($handle))) {
if ($eintrag === '.' || $eintrag === '..') {
continue;
}
$vollpfad = $pfad . '/' . $eintrag;
$stat = ssh2_sftp_stat($sftp, $vollpfad);
if ($stat && ($stat['mode'] & 0040000)) {
// Unterverzeichnis rekursiv leeren
sftp_rmdir_recursive($sftp, $vollpfad);
} else {
// Datei löschen
ssh2_sftp_unlink($sftp, $vollpfad);
}
}
closedir($handle);
// Nun leeres Verzeichnis entfernen
return ssh2_sftp_rmdir($sftp, $pfad);
}
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheimespasswort');
$sftp = ssh2_sftp($connection);
if (sftp_rmdir_recursive($sftp, '/var/www/html/alter_ordner')) {
echo 'Verzeichnis und Inhalt erfolgreich gelöscht.';
} else {
echo 'Löschen fehlgeschlagen.';
}
?>
// Wichtig · Fallstricke
Achtung: ssh2_sftp_rmdir() ist nur für leere Verzeichnisse geeignet. Der Versuch, ein nicht-leeres Verzeichnis zu löschen, gibt false zurück, ohne eine aussagekräftige Fehlermeldung zu liefern. Prüfen Sie den Inhalt vorab oder implementieren Sie eine rekursive Löschfunktion.
Die Funktion setzt die PECL-Erweiterung ssh2 voraus (pecl install ssh2). Stellen Sie sicher, dass die Erweiterung in der php.ini mit extension=ssh2 aktiviert ist.
Beachten Sie, dass der Pfad ($dirname) immer als absoluter Pfad auf dem entfernten Server angegeben werden sollte, um unbeabsichtigtes Löschen falscher Verzeichnisse zu vermeiden.