Signatur
Beschreibung
posix_getgroups() liefert eine Liste aller Gruppen-IDs (GIDs), die dem aktuellen Prozess zugeordnet sind. Dabei werden sowohl die primäre Gruppe als auch alle ergänzenden (supplementary) Gruppen zurückgegeben, wie sie vom Betriebssystem für den laufenden Prozess hinterlegt sind.
Die Funktion ist besonders nützlich, wenn ein PHP-Skript (z. B. ein CLI-Prozess) prüfen muss, ob es Mitglied einer bestimmten Gruppe ist – etwa um festzustellen, ob es Zugriff auf geschützte Ressourcen hat. In Kombination mit posix_getgrgid() lassen sich aus den numerischen GIDs die lesbaren Gruppennamen ermitteln.
Wichtig: Die Funktion steht nur auf POSIX-kompatiblen Systemen (Linux, macOS, BSD) zur Verfügung und ist unter Windows nicht verfügbar. Sie setzt die POSIX-Erweiterung voraus, die bei vielen Hosting-Umgebungen standardmäßig aktiv ist.
Rückgabewert
false zurückgegeben.Beispiele
Alle Gruppen des aktuellen Prozesses ausgeben
<?php
$gids = posix_getgroups();
if ($gids === false) {
echo 'Fehler beim Abrufen der Gruppen.' . PHP_EOL;
} else {
echo 'Gruppen-IDs des aktuellen Prozesses:' . PHP_EOL;
foreach ($gids as $gid) {
$info = posix_getgrgid($gid);
$name = $info ? $info['name'] : '(unbekannt)';
echo " GID $gid => $name" . PHP_EOL;
}
}
Prüfen, ob der Prozess Mitglied einer bestimmten Gruppe ist
<?php
$zielgruppe = 'docker';
$gids = posix_getgroups();
$istMitglied = false;
foreach ($gids as $gid) {
$info = posix_getgrgid($gid);
if ($info && $info['name'] === $zielgruppe) {
$istMitglied = true;
break;
}
}
if ($istMitglied) {
echo "Der Prozess gehört zur Gruppe '$zielgruppe'." . PHP_EOL;
} else {
echo "Der Prozess ist KEIN Mitglied der Gruppe '$zielgruppe'." . PHP_EOL;
}
// Wichtig · Fallstricke
Plattformabhängigkeit: posix_getgroups() ist ausschließlich auf POSIX-kompatiblen Systemen verfügbar (Linux, macOS, BSD). Unter Windows führt der Aufruf zu einem fatalen Fehler, falls die POSIX-Erweiterung nicht verfügbar ist.
Sicherheitshinweis: Die zurückgegebenen Gruppen-IDs spiegeln den Zustand des laufenden Prozesses wider. Bei einem Webserver-Prozess (z. B. Apache, PHP-FPM) sind dies in der Regel die Gruppen des Webserver-Benutzers und nicht des angemeldeten Benutzers. Die Funktion sollte nicht zur Autorisierungsprüfung für Anwendungsbenutzer verwendet werden.
Die POSIX-Erweiterung lässt sich mit extension_loaded('posix') prüfen, bevor posix_getgroups() aufgerufen wird.