Start · Sprachen · PHP · Referenz · get_current_user

get_current_user

Funktion

Gibt den Namen des Betriebssystem-Benutzers zurück, dem die aktuell ausgeführte PHP-Skriptdatei gehört.

seit PHP 4.0.0 Kategorie: misc

Signatur

get_current_user(): string

Beschreibung

get_current_user() ermittelt den Benutzernamen des Datei-Eigentümers des aktuell ausgeführten PHP-Skripts – also jenen Betriebssystem-Benutzer, der im Dateisystem als Besitzer der Skriptdatei eingetragen ist. Dies ist nicht zwangsläufig derselbe Benutzer, unter dem der PHP-Prozess (z. B. www-data oder apache) läuft.

Die Funktion wird typischerweise in Diagnose- oder Debugging-Skripten eingesetzt, um Dateiberechtigungsprobleme zu analysieren. Sie kann helfen herauszufinden, warum ein Skript keine Schreibrechte auf bestimmte Verzeichnisse hat, wenn der Prozessbenutzer vom Datei-Eigentümer abweicht.

Auf Unix-/Linux-Systemen liest PHP intern die UID der Skriptdatei aus und löst sie über die Systemfunktion getpwuid() in einen Benutzernamen auf. Unter Windows verhält sich die Funktion abhängig von der Plattform-Implementierung und liefert möglicherweise nicht immer ein sinnvolles Ergebnis.

Um den Benutzer zu ermitteln, unter dem der PHP-Prozess selbst läuft (also der effektive Prozessbenutzer), sollte stattdessen posix_getpwuid(posix_geteuid()) verwendet werden.

Rückgabewert

Typ
string
Beschreibung
Gibt den Benutzernamen des Eigentümers der aktuellen Skriptdatei als Zeichenkette zurück. Auf Systemen, auf denen der Benutzer nicht ermittelt werden kann, wird ein leerer String zurückgegeben.

Beispiele

Datei-Eigentümer des Skripts ausgeben

<?php
$owner = get_current_user();
echo 'Eigentümer dieser Skriptdatei: ' . $owner . PHP_EOL;
// Mögliche Ausgabe unter Linux: Eigentümer dieser Skriptdatei: deploy
Eigentümer dieser Skriptdatei: deploy

Datei-Eigentümer mit Prozessbenutzer vergleichen

<?php
// Eigentümer der Skriptdatei
$fileOwner = get_current_user();

// Benutzer, unter dem der PHP-Prozess läuft (benötigt POSIX-Extension)
$processUser = 'unbekannt';
if (function_exists('posix_geteuid')) {
    $info = posix_getpwuid(posix_geteuid());
    $processUser = $info['name'] ?? 'unbekannt';
}

echo 'Datei-Eigentümer : ' . $fileOwner   . PHP_EOL;
echo 'Prozess-Benutzer: ' . $processUser . PHP_EOL;

if ($fileOwner !== $processUser) {
    echo 'Achtung: Datei-Eigentümer und Prozess-Benutzer stimmen nicht überein!' . PHP_EOL;
}
Datei-Eigentümer : deploy Prozess-Benutzer: www-data Achtung: Datei-Eigentümer und Prozess-Benutzer stimmen nicht überein!

// Wichtig · Fallstricke

Plattformabhängigkeit: Unter Windows kann get_current_user() unzuverlässige oder leere Ergebnisse liefern, da das Windows-Dateisystem-Konzept von Datei-Eigentümerschaft anders implementiert ist als unter Unix-Systemen.

Verwechslungsgefahr: Der Name der Funktion ist irreführend – sie gibt nicht den aktuell eingeloggten Web-Benutzer oder den PHP-Prozessbenutzer zurück, sondern ausschließlich den Dateisystem-Eigentümer der Skriptdatei. Dies führt häufig zu Missverständnissen.

Die Funktion hat keine Abhängigkeit von der POSIX-Extension und ist daher ohne zusätzliche Extensions verfügbar, im Gegensatz zu posix_getpwuid().