Start · Sprachen · PHP · Referenz · ssh2_sftp_rmdir

ssh2_sftp_rmdir

Funktion

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

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_sftp_rmdir(resource $sftp, string $dirname): bool

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

Typ
bool
Beschreibung
Gibt 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.";
}
?>
Verzeichnis '/var/www/html/temp_ordner' erfolgreich entfernt.

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.';
}
?>
Verzeichnis und Inhalt erfolgreich gelöscht.

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