Start · Sprachen · PHP · Referenz · fileowner

fileowner

Funktion

Gibt die numerische Benutzer-ID (UID) des Eigentümers einer Datei zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

fileowner(string $filename): int|false

Beschreibung

fileowner() ermittelt die numerische Benutzer-ID (UID) des Eigentümers einer Datei oder eines Verzeichnisses. Auf Unix-ähnlichen Betriebssystemen entspricht diese ID dem Eintrag in /etc/passwd. Um den Benutzernamen zu erhalten, kann das Ergebnis an die Funktion posix_getpwuid() übergeben werden.

Die Funktion ist vor allem nützlich, wenn Skripte Datei-Berechtigungen prüfen oder Eigentümerverhältnisse von Dateien analysieren müssen, beispielsweise in Verwaltungs-Tools oder Sicherheitsprüfungen. Auf Windows-Systemen wird stets 0 zurückgegeben, da dieses Betriebssystem keine numerischen UIDs im Unix-Sinne verwendet.

Die Ergebnisse von fileowner() werden intern gecacht. Wenn sich die Dateieigentümerschaft geändert hat, sollte zuvor clearstatcache() aufgerufen werden, um veraltete Cache-Einträge zu verwerfen. Der Cache gilt auch für andere stat-Funktionen wie fileperms(), filesize() oder filemtime().

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Datei oder zum Verzeichnis, dessen Eigentümer ermittelt werden soll. Relative und absolute Pfade werden akzeptiert.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die numerische Benutzer-ID (UID) des Dateieigentümers als int zurück. Bei einem Fehler (z. B. Datei nicht vorhanden, fehlende Leserechte) wird false zurückgegeben.

Beispiele

UID des Dateieigentümers ermitteln

<?php
$filename = '/var/www/html/index.php';

$uid = fileowner($filename);

if ($uid === false) {
    echo "Eigentümer konnte nicht ermittelt werden.";
} else {
    echo "UID des Eigentümers: " . $uid . PHP_EOL;
}
?>
UID des Eigentümers: 1000

UID in Benutzernamen auflösen (POSIX)

<?php
$filename = '/var/www/html/index.php';

$uid = fileowner($filename);

if ($uid !== false && function_exists('posix_getpwuid')) {
    $userInfo = posix_getpwuid($uid);
    echo "Eigentümer: " . $userInfo['name'] . PHP_EOL;
    echo "UID: " . $uid . PHP_EOL;
} else {
    echo "POSIX-Erweiterung nicht verfügbar oder Fehler aufgetreten.";
}
?>
Eigentümer: www-data UID: 33

Cache leeren und aktuellen Eigentümer prüfen

<?php
$filename = '/tmp/testdatei.txt';

// Sicherstellen, dass kein veralteter Cache-Eintrag verwendet wird
clearstatcache(true, $filename);

$uid = fileowner($filename);

if ($uid !== false) {
    echo "Aktuelle UID des Eigentümers: " . $uid . PHP_EOL;
} else {
    echo "Datei nicht gefunden oder kein Zugriff.";
}
?>
Aktuelle UID des Eigentümers: 0

// Wichtig · Fallstricke

Windows: Auf Windows-Systemen gibt fileowner() immer 0 zurück, da Windows kein Unix-kompatibles UID-System verwendet. Die Funktion ist dort weitgehend nutzlos.

Stat-Cache: Ergebnisse werden von PHP intern gecacht. Bei dynamischen Dateisystemoperationen (z. B. chown()) sollte clearstatcache() aufgerufen werden, um korrekte Werte zu erhalten.

Berechtigungen: Das ausführende PHP-Prozess-Konto benötigt mindestens Lesezugriff auf das Verzeichnis, in dem die Datei liegt, um die Eigentümerinformation abzufragen. Root-Zugriff ist jedoch nicht erforderlich.