Start · Sprachen · PHP · Referenz · posix_getgroups

posix_getgroups

Funktion

Gibt ein Array mit den numerischen GIDs (Gruppen-IDs) aller Gruppen zurück, denen der aktuelle Prozess angehört.

seit PHP 4.0.0 Kategorie: misc

Signatur

posix_getgroups(): array|false

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

Typ
array|false
Beschreibung
Gibt ein numerisch indexiertes Array mit den GIDs (als Integer) aller Gruppen des aktuellen Prozesses zurück. Im Fehlerfall wird 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;
    }
}
Gruppen-IDs des aktuellen Prozesses: GID 1000 => www-data GID 4 => adm GID 27 => sudo

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;
}
Der Prozess ist KEIN Mitglied der Gruppe 'docker'.

// 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.