Signatur
Beschreibung
Erweiterte Dateiattribute (Extended Attributes, kurz xattr) sind Name-Wert-Paare, die im Dateisystem direkt an Dateien, Verzeichnisse oder symbolische Links angehängt werden können – unabhängig vom eigentlichen Dateiinhalt. Sie werden z. B. genutzt, um Metadaten wie Zugriffsrechte (SELinux), MIME-Typen, Benutzerkommentare oder Backup-Flags zu speichern.
xattr_get liest den Wert des erweiterten Attributs mit dem angegebenen Namen aus dem Dateisystem und gibt ihn als Zeichenkette zurück. Das Attribut muss zuvor mit xattr_set oder einem externen Tool (z. B. setfattr) gesetzt worden sein.
Das Verhalten kann über den $flags-Parameter gesteuert werden: Standardmäßig wird im Benutzernamensraum (user.*) gesucht. Mit XATTR_ROOT kann in den vertrauenswürdigen oder sicherheitsrelevanten Systemnamensräumen gesucht werden, was jedoch Root-Rechte erfordert. Mit XATTR_DONTFOLLOW wird ein symbolischer Link selbst anstelle des Ziels abgefragt.
Die Funktion steht nur auf Systemen zur Verfügung, die Extended Attributes unterstützen (Linux mit ext2/ext3/ext4, XFS, Btrfs etc.; macOS). Die PECL-Erweiterung xattr muss installiert sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Datei oder zum Verzeichnis, deren erweitertes Attribut ausgelesen werden soll. | |
| $name Pflicht | string | Name des erweiterten Attributs. Im Benutzernamensraum wird automatisch das Präfix user. vorangestellt, sofern kein XATTR_ROOT-Flag gesetzt ist. |
|
| $flags | int | 0 | Bitmaske aus folgenden Konstanten: XATTR_DONTFOLLOW — folgt symbolischen Links nicht; XATTR_ROOT — verwendet den Root-Namensraum (erfordert Root-Rechte). |
Rückgabewert
false zurückgegeben.Beispiele
Einfaches Lesen eines erweiterten Attributs
<?php
// Datei anlegen und ein Attribut setzen
$file = '/tmp/testdatei.txt';
file_put_contents($file, 'Inhalt');
// Attribut setzen
xattr_set($file, 'kommentar', 'Wichtiges Dokument');
// Attribut wieder auslesen
$wert = xattr_get($file, 'kommentar');
if ($wert !== false) {
echo 'Attribut-Wert: ' . $wert . PHP_EOL;
} else {
echo 'Attribut nicht gefunden.' . PHP_EOL;
}
Symbolischen Link selbst abfragen (nicht das Ziel)
<?php
$ziel = '/tmp/originaldatei.txt';
$link = '/tmp/link_auf_datei.txt';
file_put_contents($ziel, 'Zieldatei');
symlink($ziel, $link);
// Attribut nur am Link selbst setzen (nicht am Ziel)
xattr_set($link, 'link-info', 'Ich bin ein Link', XATTR_DONTFOLLOW);
// Attribut des Links (nicht des Ziels) lesen
$wert = xattr_get($link, 'link-info', XATTR_DONTFOLLOW);
echo $wert . PHP_EOL;
// Zieldatei hat dieses Attribut nicht
$wertZiel = xattr_get($ziel, 'link-info');
var_dump($wertZiel);
// Wichtig · Fallstricke
Plattformabhängigkeit: Extended Attributes sind nicht auf allen Dateisystemen oder Betriebssystemen verfügbar. Das Dateisystem muss mit der Option user_xattr eingehängt sein (Linux). Auf Systemen ohne xattr-Unterstützung schlägt die Funktion fehl.
Erweiterung erforderlich: xattr_get gehört zur PECL-Erweiterung xattr, die separat installiert werden muss (pecl install xattr). Sie ist nicht Teil der PHP-Standardinstallation.
Rückgabewert prüfen: Da false zurückgegeben wird, wenn das Attribut nicht existiert, sollte immer mit === false verglichen werden, um leere Attributwerte nicht fälschlicherweise als Fehler zu interpretieren.