Start · Sprachen · PHP · Referenz · xattr_get

xattr_get

Funktion

Liest den Wert eines erweiterten Attributs (<code>xattr</code>) einer Datei oder eines Verzeichnisses.

seit PHP 1.0.0 Kategorie: io

Signatur

xattr_get(string $filename, string $name, int $flags = 0): string|false

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

Typ
string|false
Beschreibung
Gibt den Wert des erweiterten Attributs als Zeichenkette zurück. Falls das Attribut nicht existiert, die Datei nicht gefunden wurde oder ein Fehler aufgetreten ist, wird 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;
}
Attribut-Wert: Wichtiges Dokument

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);
Ich bin ein Link bool(false)

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