Signatur
Beschreibung
xattr_remove löscht ein benanntes erweitertes Attribut (extended attribute) von einer Datei oder einem Verzeichnis im Dateisystem. Erweiterte Attribute sind schlüssel-wertige Metadaten, die über die klassischen POSIX-Attribute (Besitzer, Gruppe, Berechtigungen) hinausgehen und von Betriebssystemen wie Linux (ext2/3/4, XFS, Btrfs) und macOS unterstützt werden.
Die Funktion ist typischerweise dann nützlich, wenn selbst gesetzte Metadaten (z. B. Tags, Klassifizierungen oder Anwendungsdaten) wieder bereinigt werden sollen, ohne die Datei selbst zu verändern. Sie setzt voraus, dass die zugrunde liegende Partition xattr-fähig gemountet ist und dass der PHP-Prozess über die nötigen Dateisystem-Berechtigungen verfügt.
Über den Parameter flags kann gesteuert werden, ob das Attribut aus dem normalen Benutzer-Namespace (XATTR_USER, Standard) oder aus einem anderen Namespace (z. B. XATTR_ROOT) entfernt werden soll. Der Root-Namespace erfordert in der Regel erhöhte Rechte.
Die Funktion steht nur zur Verfügung, wenn PHP mit der PECL-Erweiterung xattr kompiliert bzw. installiert wurde. Sie ist nicht Teil der PHP-Kernbibliothek.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Datei oder zum Verzeichnis, von der bzw. dem das erweiterte Attribut entfernt werden soll. | |
| $name Pflicht | string | Name des zu entfernenden erweiterten Attributs (ohne Namespace-Präfix, z. B. 'user.myapp.tag' → Name wäre 'myapp.tag' bei Verwendung von XATTR_USER). |
|
| $flags | int | 0 | Optionale Flags zur Steuerung des Namespaces. Mögliche Werte: XATTR_USER (Standard, Benutzer-Namespace), XATTR_ROOT (Root-Namespace, benötigt Root-Rechte), XATTR_TRUSTED, XATTR_SECURITY. |
Rückgabewert
true zurück, wenn das Attribut erfolgreich entfernt wurde. Gibt false zurück, wenn das Attribut nicht existiert, die Datei nicht gefunden wird oder die Berechtigungen fehlen.Beispiele
Erweitertes Attribut setzen und anschließend entfernen
<?php
$file = '/tmp/beispiel.txt';
file_put_contents($file, 'Testinhalt');
// Attribut setzen
xattr_set($file, 'projekt', 'alpha');
echo 'Attribut gesetzt: ' . xattr_get($file, 'projekt') . PHP_EOL;
// Attribut entfernen
if (xattr_remove($file, 'projekt')) {
echo 'Attribut erfolgreich entfernt.' . PHP_EOL;
} else {
echo 'Fehler beim Entfernen des Attributs.' . PHP_EOL;
}
// Prüfen, ob es noch vorhanden ist
$wert = xattr_get($file, 'projekt');
var_dump($wert);
Alle erweiterten Attribute einer Datei bereinigen
<?php
$file = '/tmp/dokument.pdf';
// Alle vorhandenen Attribute auflisten und entfernen
$attribute = xattr_list($file);
if (!empty($attribute)) {
foreach ($attribute as $attrName) {
if (xattr_remove($file, $attrName)) {
echo "Attribut '{$attrName}' entfernt." . PHP_EOL;
} else {
echo "Konnte '{$attrName}' nicht entfernen." . PHP_EOL;
}
}
} else {
echo 'Keine erweiterten Attribute vorhanden.' . PHP_EOL;
}
// Wichtig · Fallstricke
Betriebssystem-Abhängigkeit: Erweiterte Attribute werden nicht von allen Dateisystemen unterstützt. FAT32, exFAT und NFS unterstützen sie in der Regel nicht. Unter Linux muss die Partition mit der Option user_xattr gemountet sein (z. B. in /etc/fstab), damit Benutzer eigene Attribute setzen und entfernen dürfen.
PECL-Erweiterung: xattr_remove gehört zur PECL-Erweiterung xattr und ist nicht standardmäßig in PHP enthalten. Vor der Verwendung sollte per extension_loaded('xattr') geprüft werden, ob die Erweiterung verfügbar ist.
Berechtigungen: Um ein Attribut aus dem Root- oder Trusted-Namespace zu entfernen (XATTR_ROOT), sind Root-Rechte erforderlich. Fehlen diese, schlägt die Funktion ohne Fehlermeldung fehl und gibt false zurück.