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