Signatur
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
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 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.";
}
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.";
}
// 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.