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