Start · Sprachen · PHP · Referenz · xattr_supported

xattr_supported

Funktion

Prüft, ob das Dateisystem, auf dem die angegebene Datei liegt, erweiterte Attribute (Extended Attributes) unterstützt.

seit PHP 0.9.0 Kategorie: io

Signatur

xattr_supported(string $filename, int $flags = 0): bool

Beschreibung

xattr_supported() ermöglicht es, vor dem Setzen oder Lesen erweiterter Attribute zu prüfen, ob das zugrundeliegende Dateisystem diese Funktion überhaupt unterstützt. Erweiterte Attribute (xattr) erlauben es, beliebige Metadaten als Schlüssel-Wert-Paare an Dateien und Verzeichnisse zu hängen – unabhängig vom eigentlichen Dateiinhalt.

Nicht alle Dateisysteme unterstützen erweiterte Attribute. Während typische Linux-Dateisysteme wie ext2/3/4, XFS, Btrfs oder ReiserFS diese Funktion kennen, fehlt die Unterstützung bei FAT, einigen Netzwerkdateisystemen oder bestimmten temporären Dateisystemen wie tmpfs (je nach Kernel-Konfiguration). Ein präventiver Aufruf von xattr_supported() verhindert Fehler, die andernfalls beim tatsächlichen Zugriff auf die Attribute auftreten würden.

Die Funktion gehört zur PECL-Extension xattr und steht nur auf Systemen zur Verfügung, auf denen diese Extension installiert ist. Sie ist typischerweise nur unter Linux und ähnlichen POSIX-Systemen verfügbar.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Datei oder zum Verzeichnis, dessen Dateisystem auf xattr-Unterstützung geprüft werden soll.
$flags int 0 Optionale Flags. Mit XATTR_DONTFOLLOW wird einem symbolischen Link nicht gefolgt, sondern der Link selbst geprüft. Standardmäßig wird symbolischen Links gefolgt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Dateisystem der angegebenen Datei erweiterte Attribute unterstützt, andernfalls false.

Beispiele

Einfache Prüfung vor dem Setzen eines erweiterten Attributs

<?php
$datei = '/var/www/html/beispiel.txt';

if (xattr_supported($datei)) {
    xattr_set($datei, 'user.kommentar', 'Dieses Dokument ist vertraulich.');
    echo "Attribut wurde erfolgreich gesetzt.";
} else {
    echo "Das Dateisystem unterstützt keine erweiterten Attribute.";
}
?>
Attribut wurde erfolgreich gesetzt.

Prüfung ohne Auflösung von symbolischen Links

<?php
$symlink = '/tmp/mein_link';

// Symbolischen Link selbst prüfen, nicht das Ziel
if (xattr_supported($symlink, XATTR_DONTFOLLOW)) {
    echo "Der symbolische Link selbst unterstützt erweiterte Attribute.";
} else {
    echo "Keine xattr-Unterstützung für den Symlink oder dessen Dateisystem.";
}
?>

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Extension xattr muss installiert und in der php.ini aktiviert sein (extension=xattr.so). Unter Debian/Ubuntu kann sie über pecl install xattr installiert werden.

Plattformabhängigkeit: Die Extension funktioniert nur unter Linux und ähnlichen POSIX-kompatiblen Betriebssystemen. Unter Windows ist sie nicht verfügbar.

Auch wenn xattr_supported() true zurückgibt, können einzelne Operationen trotzdem scheitern – etwa wenn die Dateisystem-Optionen user_xattr beim Einhängen nicht gesetzt wurden oder wenn die Berechtigungen fehlen.