Start · Sprachen · PHP · Referenz · ssh2_sftp_unlink

ssh2_sftp_unlink

Funktion

Löscht eine Datei auf einem entfernten Server über SFTP.

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_sftp_unlink(resource $sftp, string $filename): bool

Beschreibung

ssh2_sftp_unlink() entfernt eine einzelne Datei auf einem entfernten Server über eine bestehende SFTP-Verbindung. Die Funktion ist das SFTP-Äquivalent zur lokalen PHP-Funktion unlink() und ermöglicht es, Dateien auf dem Remote-Host zu löschen, ohne eine Shell-Verbindung zu benötigen.

Als erstes Argument erwartet die Funktion eine SFTP-Ressource, die zuvor mit ssh2_sftp() aus einer SSH2-Verbindung erzeugt wurde. Der Dateiname wird als absoluter oder relativer Pfad auf dem entfernten Server angegeben.

Die Funktion ist besonders nützlich in automatisierten Deployment-Prozessen oder Wartungsscripts, bei denen temporäre Dateien, Log-Dateien oder veraltete Ressourcen auf einem Remote-Server bereinigt werden müssen – sicher über eine verschlüsselte SSH2-Verbindung.

Beachte, dass ssh2_sftp_unlink() nur einzelne Dateien löscht. Verzeichnisse müssen stattdessen mit ssh2_sftp_rmdir() entfernt werden. Die Funktion ist Teil der SSH2-Erweiterung (PECL), die separat installiert werden muss.

Parameter

Name Typ Default Beschreibung
$sftp Pflicht resource Eine SFTP-Ressource, die mit ssh2_sftp() erzeugt wurde. Diese Ressource repräsentiert die SFTP-Subsystem-Verbindung innerhalb einer bestehenden SSH2-Sitzung.
$filename Pflicht string Der Pfad zur zu löschenden Datei auf dem entfernten Server. Kann absolut (z. B. /var/www/html/tmp/file.txt) oder relativ zum Home-Verzeichnis des SSH-Benutzers angegeben werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Datei erfolgreich gelöscht wurde, andernfalls false. Ein Fehlschlag kann auftreten, wenn die Datei nicht existiert, keine Schreibrechte vorhanden sind oder der angegebene Pfad auf ein Verzeichnis zeigt.

Beispiele

Einfaches Löschen einer Remote-Datei via SFTP

<?php
// SSH2-Verbindung herstellen
$connection = ssh2_connect('example.com', 22);
if (!$connection) {
    die('Verbindung zum Server fehlgeschlagen.');
}

// Authentifizierung mit Benutzername und Passwort
if (!ssh2_auth_password($connection, 'benutzer', 'geheim')) {
    die('Authentifizierung fehlgeschlagen.');
}

// SFTP-Ressource erzeugen
$sftp = ssh2_sftp($connection);
if (!$sftp) {
    die('SFTP-Subsystem konnte nicht initialisiert werden.');
}

// Remote-Datei löschen
$remotePfad = '/var/www/html/tmp/veraltet.txt';
if (ssh2_sftp_unlink($sftp, $remotePfad)) {
    echo "Datei erfolgreich gelöscht: $remotePfad\n";
} else {
    echo "Fehler: Datei konnte nicht gelöscht werden.\n";
}
Datei erfolgreich gelöscht: /var/www/html/tmp/veraltet.txt

Mehrere temporäre Dateien auf dem Remote-Server bereinigen

<?php
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheim');
$sftp = ssh2_sftp($connection);

$tempDateien = [
    '/var/www/html/cache/cache_01.tmp',
    '/var/www/html/cache/cache_02.tmp',
    '/var/www/html/cache/cache_03.tmp',
];

$geloescht = 0;
$fehler = 0;

foreach ($tempDateien as $datei) {
    if (ssh2_sftp_unlink($sftp, $datei)) {
        echo "Gelöscht: $datei\n";
        $geloescht++;
    } else {
        echo "Fehler beim Löschen: $datei\n";
        $fehler++;
    }
}

echo "\nErgebnis: $geloescht gelöscht, $fehler Fehler.\n";
Gelöscht: /var/www/html/cache/cache_01.tmp Gelöscht: /var/www/html/cache/cache_02.tmp Gelöscht: /var/www/html/cache/cache_03.tmp Ergebnis: 3 gelöscht, 0 Fehler.

// Wichtig · Fallstricke

Sicherheitshinweis: Übergib niemals benutzerkontrollierte Eingaben ohne vorherige Validierung als $filename. Ein Angreifer könnte durch Path-Traversal-Angriffe (z. B. ../../etc/passwd) unbeabsichtigte Dateien löschen. Stelle sicher, dass Pfade canonisiert und auf erlaubte Verzeichnisse beschränkt sind.

Nur Dateien: ssh2_sftp_unlink() löscht ausschließlich Dateien. Für das Löschen von Verzeichnissen muss ssh2_sftp_rmdir() verwendet werden. Zeigt der Pfad auf ein Verzeichnis, gibt die Funktion false zurück.

PECL-Abhängigkeit: Die Funktion ist Teil der ssh2-Erweiterung (PECL) und steht nicht in der Standard-PHP-Installation zur Verfügung. Die Erweiterung kann über PECL oder den jeweiligen Paketmanager des Betriebssystems installiert werden (pecl install ssh2).