Start · Sprachen · PHP · Referenz · chgrp

chgrp

Funktion

Ändert die Gruppenzugehörigkeit einer Datei auf dem Dateisystem.

seit PHP 4.0.0 Kategorie: io

Signatur

chgrp(string $filename, string|int $group): bool

Beschreibung

chgrp() ändert die Gruppe, der eine Datei auf dem Dateisystem angehört. Dies entspricht dem Unix-Befehl chgrp. Als Gruppe kann entweder der Name der Gruppe (String) oder die numerische Gruppen-ID (Integer) übergeben werden.

Die Funktion ist nur unter Unix-ähnlichen Betriebssystemen verfügbar (Linux, macOS usw.) und hat unter Windows keine Wirkung. Sie gibt true zurück, wenn die Änderung erfolgreich war, andernfalls false.

Wichtig: Nur der Eigentümer der Datei oder der Root-Benutzer darf die Gruppe einer Datei ändern. Gewöhnliche Benutzer können die Gruppe nur auf eine Gruppe setzen, der sie selbst angehören. Webserver-Prozesse laufen oft unter einem eingeschränkten Benutzer (z. B. www-data), weshalb diese Funktion in der Praxis häufig fehlschlägt, wenn keine ausreichenden Rechte vorliegen.

Symbolische Links werden von chgrp() dereferenziert – die Funktion ändert also die Gruppe der Zieldatei, nicht des Links selbst. Für symbolische Links kann lchgrp() verwendet werden.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Datei, deren Gruppe geändert werden soll. Relative und absolute Pfade sind erlaubt.
$group Pflicht string|int Der neue Gruppenname (String) oder die numerische Gruppen-ID (Integer), auf die die Datei gesetzt werden soll.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Gruppenänderung erfolgreich war. Im Fehlerfall (z. B. fehlende Berechtigungen, Datei nicht gefunden) wird false zurückgegeben und ein Fehler der Stufe E_WARNING erzeugt.

Beispiele

Gruppe per Gruppenname setzen

<?php
$datei = '/var/www/html/upload/bild.jpg';

if (chgrp($datei, 'www-data')) {
    echo "Gruppe erfolgreich geändert.";
} else {
    echo "Fehler: Gruppe konnte nicht geändert werden.";
}
Gruppe erfolgreich geändert.

Gruppe per numerischer Gruppen-ID setzen

<?php
$datei = '/tmp/testdatei.txt';
$gruppenId = 33; // Typische GID von www-data unter Debian/Ubuntu

if (chgrp($datei, $gruppenId)) {
    echo "Gruppe wurde auf GID {$gruppenId} gesetzt.";
} else {
    echo "Änderung fehlgeschlagen – möglicherweise fehlende Rechte.";
}
Gruppe wurde auf GID 33 gesetzt.

Ergebnis mit filegroup() prüfen

<?php
$datei = '/tmp/beispiel.txt';
file_put_contents($datei, 'Testinhalt');

$neueGruppe = 'users';
if (chgrp($datei, $neueGruppe)) {
    $gid = filegroup($datei);
    $gruppenInfo = posix_getgrgid($gid);
    echo "Aktuelle Gruppe: " . $gruppenInfo['name'] . " (GID: {$gid})";
} else {
    echo "Gruppenänderung fehlgeschlagen.";
}
Aktuelle Gruppe: users (GID: 100)

// Wichtig · Fallstricke

Plattformverfügbarkeit: chgrp() funktioniert ausschließlich auf Unix-ähnlichen Systemen. Unter Windows hat die Funktion keine Wirkung und gibt stets false zurück.

Berechtigungen: Um die Gruppe einer Datei zu ändern, muss der ausführende PHP-Prozess entweder der Eigentümer der Datei sein oder Root-Rechte besitzen. In Webserver-Umgebungen ist dies häufig nicht der Fall, weshalb der Aufruf oft scheitert.

Symbolische Links: Im Gegensatz zu lchgrp() folgt chgrp() symbolischen Links und ändert die Gruppe der Zieldatei. Zum Ändern der Gruppe eines Links selbst sollte lchgrp() verwendet werden.

Stat-Cache: PHP cached Datei-Statusinformationen. Nach einem erfolgreichen chgrp()-Aufruf sollte clearstatcache() aufgerufen werden, damit nachfolgende Aufrufe von filegroup() den aktuellen Wert liefern.