Start · Sprachen · PHP · Referenz · posix_getlogin

posix_getlogin

Funktion

Gibt den Loginnamen des aktuell laufenden Prozesses zurück, wie er in der POSIX-Benutzer-Datenbank hinterlegt ist.

seit PHP 4.0.0 Kategorie: misc

Signatur

posix_getlogin(): string|false

Beschreibung

posix_getlogin() liefert den Loginnamen des Benutzers, unter dessen Kontext der aktuelle PHP-Prozess ausgeführt wird. Dabei wird die POSIX-Funktion getlogin() des Betriebssystems aufgerufen, die typischerweise den Namen aus dem Terminaleintrag (/var/run/utmp) ermittelt.

Die Funktion ist nützlich, wenn man in CLI-Skripten oder Server-Prozessen den ausführenden Benutzer identifizieren möchte, etwa für Logging-Zwecke oder zur Prüfung von Zugriffsberechtigungen. Im Gegensatz zu posix_getpwuid(posix_getuid()) fragt sie direkt nach dem eingeloggten Benutzer, nicht nach der effektiven UID.

Da posix_getlogin() Teil der POSIX-Erweiterung ist, steht sie ausschließlich auf POSIX-kompatiblen Systemen (Linux, macOS, BSD usw.) zur Verfügung. Unter Windows ist diese Funktion nicht verfügbar. Falls der Login-Name nicht ermittelt werden kann – etwa in Daemon-Prozessen ohne assoziiertes Terminal – gibt die Funktion false zurück.

Für zuverlässigere Ergebnisse in nicht-interaktiven Umgebungen empfiehlt es sich, alternativ posix_getpwuid(posix_getuid()) zu verwenden, das den Benutzernamen direkt anhand der realen UID aus /etc/passwd auflöst.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Loginnamen als string zurück, oder false, wenn der Login-Name nicht ermittelt werden konnte (z. B. kein Terminal vorhanden oder POSIX nicht verfügbar).

Beispiele

Loginnamen des aktuellen Benutzers ausgeben

<?php
$login = posix_getlogin();

if ($login !== false) {
    echo 'Aktueller Loginname: ' . $login . PHP_EOL;
} else {
    echo 'Login-Name konnte nicht ermittelt werden.' . PHP_EOL;
}
Aktueller Loginname: www-data

Fallback auf posix_getpwuid bei fehlendem Terminal

<?php
// posix_getlogin() kann in Daemon-Prozessen false zurückgeben.
// Sicherer Fallback über UID:
$login = posix_getlogin();

if ($login === false) {
    $uid  = posix_getuid();
    $info = posix_getpwuid($uid);
    $login = $info !== false ? $info['name'] : '(unbekannt)';
}

echo 'Ausführender Benutzer: ' . $login . PHP_EOL;
Ausführender Benutzer: deploy

// Wichtig · Fallstricke

Plattformeinschränkung: posix_getlogin() steht nur auf POSIX-kompatiblen Systemen zur Verfügung. Unter Windows wird ein fataler Fehler ausgelöst, sofern die POSIX-Erweiterung nicht vorhanden ist.

Daemon-Prozesse: In Umgebungen ohne zugeordnetes Terminal (z. B. Webserver-Prozesse, Cron-Jobs, systemd-Services) liefert die Funktion häufig false, da kein utmp-Eintrag vorhanden ist. In diesen Fällen sollte posix_getpwuid(posix_getuid()) als zuverlässigere Alternative verwendet werden.

Sicherheitshinweis: Der zurückgegebene Loginname sollte nicht ohne Validierung für sicherheitskritische Entscheidungen verwendet werden, da er unter bestimmten Umständen manipulierbar sein kann. Für Berechtigungsprüfungen ist die numerische UID aussagekräftiger und robuster.