Start · Sprachen · PHP · Referenz · xattr_list

xattr_list

Funktion

Gibt eine Liste aller erweiterten Attribute (xattrs) einer Datei oder eines Verzeichnisses zurück.

seit PHP 5.0.0 Kategorie: io

Signatur

xattr_list(string $filename, int $flags = 0): array|false

Beschreibung

xattr_list() liest alle erweiterten Attribute (Extended Attributes, kurz xattrs) einer Datei oder eines Verzeichnisses aus dem Dateisystem und gibt deren Namen als Array zurück. Erweiterte Attribute sind Schlüssel-Wert-Paare, die im Dateisystem direkt an Dateien oder Verzeichnisse angehängt werden können, ohne den eigentlichen Dateiinhalt zu verändern.

Die Funktion gehört zur xattr-PECL-Erweiterung und setzt ein Dateisystem voraus, das erweiterte Attribute unterstützt (z. B. ext2/ext3/ext4 mit Option user_xattr, XFS, Btrfs oder HFS+ unter macOS). Der aufrufende Prozess benötigt ausreichende Leserechte auf die Datei.

Mit dem optionalen Parameter $flags kann gesteuert werden, welcher Namensraum verwendet wird: Standardmäßig wird der user-Namensraum verwendet (XATTR_USER). Mit XATTR_ROOT (erfordert Root-Rechte) kann auf den trusted-Namensraum zugegriffen werden.

Das Ergebnis-Array enthält ausschließlich die Namen der Attribute. Um die zugehörigen Werte abzurufen, muss für jeden Namen xattr_get() aufgerufen werden.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Datei oder zum Verzeichnis, deren erweiterte Attribute aufgelistet werden sollen.
$flags int 0 Optionale Flags zur Steuerung des Namensraums. Mögliche Werte: XATTR_USER (Standard, user-Namensraum), XATTR_ROOT (trusted-Namensraum, nur für Root).

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den Namen aller gefundenen erweiterten Attribute zurück, oder false bei einem Fehler (z. B. Datei nicht vorhanden, Dateisystem unterstützt keine xattrs oder fehlende Rechte).

Beispiele

Alle erweiterten Attribute einer Datei auflisten

<?php
// Voraussetzung: PECL-Erweiterung 'xattr' ist installiert
// und das Dateisystem unterstützt Extended Attributes

$file = '/tmp/beispiel.txt';
file_put_contents($file, 'Testinhalt');

// Zwei Attribute setzen
xattr_set($file, 'user.autor', 'Max Mustermann');
xattr_set($file, 'user.version', '1.0');

// Alle Attributnamen auflisten
$attributes = xattr_list($file);

if ($attributes !== false) {
    foreach ($attributes as $name) {
        $value = xattr_get($file, $name);
        echo $name . ' = ' . $value . PHP_EOL;
    }
} else {
    echo 'Fehler beim Lesen der erweiterten Attribute.';
}
user.autor = Max Mustermann user.version = 1.0

Erweiterte Attribute prüfen und löschen

<?php
$file = '/tmp/dokument.pdf';

$attributes = xattr_list($file);

if ($attributes === false) {
    echo 'Keine erweiterten Attribute abrufbar oder Dateisystem nicht unterstützt.' . PHP_EOL;
} elseif (count($attributes) === 0) {
    echo 'Die Datei hat keine erweiterten Attribute.' . PHP_EOL;
} else {
    echo 'Gefundene erweiterte Attribute (' . count($attributes) . '):' . PHP_EOL;
    foreach ($attributes as $name) {
        echo '  - ' . $name . PHP_EOL;
    }

    // Alle erweiterten Attribute entfernen
    foreach ($attributes as $name) {
        xattr_remove($file, $name);
    }
    echo 'Alle erweiterten Attribute wurden entfernt.' . PHP_EOL;
}
Gefundene erweiterte Attribute (2): - user.autor - user.kommentar Alle erweiterten Attribute wurden entfernt.

// Wichtig · Fallstricke

Plattformabhängigkeit: xattr_list() ist nur auf Betriebssystemen und Dateisystemen verfügbar, die erweiterte Attribute unterstützen (Linux mit ext4/XFS/Btrfs, macOS, FreeBSD). Unter Windows ist die Funktion nicht verfügbar.

Dateisystem-Einbindung: Unter Linux muss das Dateisystem mit der Option user_xattr eingebunden sein (z. B. in /etc/fstab), damit der user-Namensraum nutzbar ist. Andernfalls schlägt die Funktion fehl.

PECL-Erweiterung: Die xattr-Funktionen sind nicht Teil des PHP-Kerns, sondern müssen als PECL-Erweiterung installiert werden (pecl install xattr). Vor der Verwendung sollte mit extension_loaded('xattr') geprüft werden, ob die Erweiterung geladen ist.