Signatur
Beschreibung
ssh2_sftp_lstat() ruft Metadaten (Statusinformationen) zu einem symbolischen Link auf einem über SSH verbundenen SFTP-Dateisystem ab. Im Gegensatz zu ssh2_sftp_stat() folgt diese Funktion dem Link nicht – sie liefert also Informationen über den Link selbst, nicht über das Ziel, auf das er verweist.
Die Funktion verhält sich analog zur C-Funktion lstat() und zum PHP-Pendant lstat() auf lokalen Dateisystemen. Der Rückgabewert ist ein assoziatives Array mit denselben Feldern wie das von stat() bekannte Array (Dateigröße, Zugriffsrechte, Zeitstempel usw.).
Typische Einsatzgebiete sind das Prüfen, ob ein Pfad ein symbolischer Link ist, das Auslesen von Link-Berechtigungen sowie das Ermitteln von Größe und Zeitstempel des Links selbst – unabhängig vom verlinkten Objekt.
Voraussetzung ist eine aktive SSH-Verbindung (erzeugt mit ssh2_connect()) sowie eine SFTP-Ressource, die mit ssh2_sftp() geöffnet wurde. Die PECL-Extension ssh2 muss installiert sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $sftp Pflicht | resource | Eine SFTP-Ressource, die zuvor mit ssh2_sftp() erzeugt wurde. |
|
| $path Pflicht | string | Pfad zum symbolischen Link auf dem entfernten Server. Der Pfad wird relativ zum SFTP-Wurzelverzeichnis der Session interpretiert. |
Rückgabewert
stat(): Felder wie size, mode, uid, gid, atime, mtime usw. Im Fehlerfall (z. B. Pfad nicht gefunden, keine Berechtigung) wird false zurückgegeben.Beispiele
Statusinformationen eines symbolischen Links abrufen
<?php
// SSH-Verbindung aufbauen
$connection = ssh2_connect('sftp.example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheim');
// SFTP-Subsystem initialisieren
$sftp = ssh2_sftp($connection);
// lstat für einen symbolischen Link abrufen
$linkPfad = '/var/www/html/current'; // ein symlink auf dem Server
$stat = ssh2_sftp_lstat($sftp, $linkPfad);
if ($stat === false) {
echo "Fehler: Link nicht gefunden oder kein Zugriff.\n";
} else {
echo "Größe des Links: " . $stat['size'] . " Bytes\n";
echo "Berechtigungen (oktal): " . decoct($stat['mode']) . "\n";
echo "Letzter Zugriff: " . date('Y-m-d H:i:s', $stat['atime']) . "\n";
echo "Letzte Änderung: " . date('Y-m-d H:i:s', $stat['mtime']) . "\n";
echo "UID / GID: " . $stat['uid'] . ' / ' . $stat['gid'] . "\n";
}
Unterschied zwischen lstat und stat demonstrieren
<?php
$connection = ssh2_connect('sftp.example.com', 22);
ssh2_auth_password($connection, 'benutzer', 'geheim');
$sftp = ssh2_sftp($connection);
$linkPfad = '/var/www/html/current'; // Symlink zeigt auf /var/www/releases/v2.5
$lstatInfo = ssh2_sftp_lstat($sftp, $linkPfad);
$statInfo = ssh2_sftp_stat($sftp, $linkPfad);
if ($lstatInfo && $statInfo) {
// lstat: Infos über den Link selbst
$istLink = (($lstatInfo['mode'] & 0170000) === 0120000);
echo "lstat – ist symbolischer Link: " . ($istLink ? 'Ja' : 'Nein') . "\n";
echo "lstat – Größe: " . $lstatInfo['size'] . " Bytes\n";
// stat: Infos über das Ziel
echo "stat – Größe des Ziels: " . $statInfo['size'] . " Bytes\n";
}
// Wichtig · Fallstricke
PECL-Abhängigkeit: ssh2_sftp_lstat() ist Teil der PECL-Extension ssh2 (libssh2). Diese ist nicht im PHP-Kern enthalten und muss separat installiert werden (pecl install ssh2).
Symlink-Erkennung: Um anhand des mode-Felds zu prüfen, ob es sich um einen symbolischen Link handelt, kann der Ausdruck ($stat['mode'] & 0170000) === 0120000 verwendet werden.
Fehlerbehandlung: Bei nicht vorhandenem Pfad oder fehlenden Berechtigungen gibt die Funktion false zurück und erzeugt eine PHP-Warnung. Es empfiehlt sich, den Rückgabewert explizit mit === false zu prüfen.
Sicherheit: Übergeben Sie niemals vom Benutzer stammende Pfadangaben ungefiltert an diese Funktion. Path-Traversal-Angriffe (z. B. ../../etc/passwd) können sensitive Datei-Metadaten preisgeben.