Signatur
Beschreibung
lstat() sammelt Metadaten (Größe, Zugriffszeiten, Berechtigungen usw.) über die angegebene Datei oder den angegebenen symbolischen Link. Im Gegensatz zu stat() folgt lstat() dem symbolischen Link nicht, sondern liefert Informationen über den Link selbst. Handelt es sich bei filename um eine reguläre Datei (kein Symlink), sind die Ergebnisse identisch mit denen von stat().
Das zurückgegebene Array enthält 26 Elemente – numerisch indiziert von 0 bis 12 sowie zusätzlich mit assoziativen Schlüsseln (z. B. dev, ino, mode, nlink, uid, gid, rdev, size, atime, mtime, ctime, blksize, blocks). Auf Windows-Systemen sind einige Felder (z. B. ino, uid, gid) immer 0.
lstat() ist besonders nützlich, wenn man prüfen möchte, ob ein Pfad ein symbolischer Link ist (z. B. über filetype() oder durch Vergleich des mode-Felds), oder wenn man die tatsächlichen Eigenschaften des Links (nicht des Ziels) benötigt. Die Funktion nutzt den internen Statistik-Cache von PHP; mit clearstatcache() lässt sich dieser leeren.
- dev – Geräte-ID
- ino – Inode-Nummer
- mode – Dateimodus (Berechtigungen + Typ)
- nlink – Anzahl der Hardlinks
- uid – Benutzer-ID des Eigentümers
- gid – Gruppen-ID des Eigentümers
- size – Dateigröße in Bytes (für Symlinks: Länge des Zielpfads)
- atime – Letzter Zugriffszeitpunkt (Unix-Timestamp)
- mtime – Letzte Änderungszeit (Unix-Timestamp)
- ctime – Letzte Statusänderung (Unix-Timestamp)
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Datei oder zum symbolischen Link, über den Informationen gesammelt werden sollen. |
Rückgabewert
false zurückgegeben und ein E_WARNING ausgelöst.Beispiele
Unterschied zwischen lstat() und stat() bei einem Symlink
<?php
// Zieldatei und Symlink anlegen
file_put_contents('/tmp/ziel.txt', 'Hallo Welt');
symlink('/tmp/ziel.txt', '/tmp/link.txt');
$lstatInfo = lstat('/tmp/link.txt');
$statInfo = stat('/tmp/link.txt');
echo 'lstat size (Link selbst): ' . $lstatInfo['size'] . PHP_EOL;
echo 'stat size (Zieldatei): ' . $statInfo['size'] . PHP_EOL;
// Typ prüfen
echo 'Typ via lstat: ' . filetype('/tmp/link.txt') . PHP_EOL; // link
// Aufräumen
unlink('/tmp/link.txt');
unlink('/tmp/ziel.txt');
Prüfen ob ein Pfad ein symbolischer Link ist
<?php
function istSymlink(string $pfad): bool {
if (!file_exists($pfad) && !is_link($pfad)) {
return false;
}
$info = lstat($pfad);
if ($info === false) {
return false;
}
// Bit 0120000 im mode-Feld kennzeichnet einen Symlink
return ($info['mode'] & 0170000) === 0120000;
}
file_put_contents('/tmp/original.txt', 'Test');
symlink('/tmp/original.txt', '/tmp/verknuepfung.txt');
var_dump(istSymlink('/tmp/verknuepfung.txt')); // true
var_dump(istSymlink('/tmp/original.txt')); // false
unlink('/tmp/verknuepfung.txt');
unlink('/tmp/original.txt');
// Wichtig · Fallstricke
Statistik-Cache: PHP cached die Ergebnisse von lstat(), stat() und verwandten Funktionen. Wenn sich die Datei oder der Link zwischen zwei Aufrufen verändert hat, muss der Cache mit clearstatcache(true, $filename) geleert werden, damit aktuelle Daten abgerufen werden.
Windows: Auf Windows werden symbolische Links nur eingeschränkt unterstützt. Die Felder ino, uid und gid liefern immer 0. Das Verhalten von lstat() gegenüber stat() kann je nach Windows-Version abweichen.
Broken Symlinks: lstat() kann auch für defekte symbolische Links aufgerufen werden (Links, deren Ziel nicht existiert), da der Link selbst noch vorhanden ist. file_exists() hingegen gibt für defekte Symlinks false zurück, während is_link() true liefert.