Start · Sprachen · PHP · Referenz · ssh2_sftp

ssh2_sftp

Funktion

Initialisiert das SFTP-Subsystem einer bestehenden SSH2-Verbindung und gibt eine SFTP-Ressource zurück.

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_sftp(resource $session): resource|false

Beschreibung

ssh2_sftp() aktiviert das SFTP-Subsystem auf einer bereits authentifizierten SSH2-Verbindung, die zuvor mit ssh2_connect() und einer der ssh2_auth_*-Funktionen aufgebaut wurde. Die zurückgegebene Ressource wird für alle weiteren SFTP-Operationen benötigt, wie z. B. das Hochladen, Herunterladen, Umbenennen oder Löschen von Dateien auf dem entfernten Server.

Die SFTP-Ressource kann direkt mit PHP-Dateisystemfunktionen wie fopen(), file_get_contents() oder file_put_contents() verwendet werden, indem der spezielle Stream-Wrapper ssh2.sftp:// genutzt wird. Alternativ stehen dedizierte Funktionen wie ssh2_sftp_mkdir(), ssh2_sftp_rename() und ssh2_sftp_unlink() zur Verfügung.

Diese Funktion gehört zur PECL-Erweiterung ssh2 und ist nicht im PHP-Kern enthalten. Sie muss separat installiert und in der php.ini aktiviert werden (extension=ssh2). Voraussetzung ist außerdem die libssh2-Bibliothek auf dem System.

Parameter

Name Typ Default Beschreibung
$session Pflicht resource Eine aktive, authentifizierte SSH2-Verbindungsressource, die von ssh2_connect() zurückgegeben wurde.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine SFTP-Ressource zurück, die für nachfolgende SFTP-Operationen verwendet werden kann. Bei einem Fehler (z. B. wenn der Server das SFTP-Subsystem nicht unterstützt oder die Verbindung ungültig ist) wird false zurückgegeben.

Beispiele

SFTP-Verbindung aufbauen und Datei hochladen

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

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

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

// Datei hochladen über Stream-Wrapper
$localFile  = '/lokaler/pfad/datei.txt';
$remoteFile = 'ssh2.sftp://' . intval($sftp) . '/remote/pfad/datei.txt';

if (file_put_contents($remoteFile, file_get_contents($localFile)) !== false) {
    echo 'Datei erfolgreich hochgeladen.';
} else {
    echo 'Fehler beim Hochladen der Datei.';
}
Datei erfolgreich hochgeladen.

Verzeichnis auf dem SFTP-Server anlegen und Dateien auflisten

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

$sftp = ssh2_sftp($connection);
if (!$sftp) {
    die('SFTP-Subsystem nicht verfügbar.');
}

// Neues Verzeichnis anlegen
if (ssh2_sftp_mkdir($sftp, '/remote/neues-verzeichnis', 0755, true)) {
    echo 'Verzeichnis erfolgreich erstellt.' . PHP_EOL;
}

// Verzeichnisinhalt auflisten über Stream-Wrapper
$dir = 'ssh2.sftp://' . intval($sftp) . '/remote/';
$handle = opendir($dir);
if ($handle) {
    while (($eintrag = readdir($handle)) !== false) {
        if ($eintrag !== '.' && $eintrag !== '..') {
            echo $eintrag . PHP_EOL;
        }
    }
    closedir($handle);
}
Verzeichnis erfolgreich erstellt. neues-verzeichnis datei.txt

// Wichtig · Fallstricke

Sicherheitshinweis: Speichere Passwörter und private Schlüssel niemals im Quellcode. Nutze stattdessen Umgebungsvariablen oder verschlüsselte Konfigurationsdateien.

Stream-Wrapper-Syntax: Ab PHP 5.x muss der Stream-Wrapper-Pfad als ssh2.sftp://<int($sftp)>/pfad angegeben werden, wobei intval($sftp) die Ressourcen-ID der SFTP-Ressource liefert. Dies ist notwendig, da PHP den Stream-Wrapper intern so erwartet.

PECL-Abhängigkeit: Diese Funktion ist nicht Teil des PHP-Kerns. Sie erfordert die PECL-Erweiterung ssh2 sowie die native Systembibliothek libssh2. Prüfe die Verfügbarkeit mit extension_loaded('ssh2').

Fehler beim Aufbau des SFTP-Subsystems können auf serverseitige Einschränkungen oder eine fehlende SFTP-Konfiguration im SSH-Daemon (sshd_config) zurückzuführen sein.