Signatur
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
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.';
}
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);
}
// 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.