Start · Sprachen · PHP · Referenz · ssh2_sftp_lstat

ssh2_sftp_lstat

Funktion

Liefert Statusinformationen zu einem symbolischen Link auf einem entfernten SFTP-Dateisystem, ohne dem Link zu folgen.

seit PHP 0.9.0 Kategorie: http

Signatur

ssh2_sftp_lstat(resource $sftp, string $path): array|false

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

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives (und numerisch indiziertes) Array mit Statusinformationen zurück – identisch aufgebaut wie das Ergebnis von 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";
}
Größe des Links: 21 Bytes Berechtigungen (oktal): 120777 Letzter Zugriff: 2024-03-15 10:22:05 Letzte Änderung: 2024-03-15 10:22:05 UID / GID: 1000 / 1000

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";
}
lstat – ist symbolischer Link: Ja lstat – Größe: 21 Bytes stat – Größe des Ziels: 4096 Bytes

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