W3docs

fileowner()

Die Funktion fileowner() gibt den Eigentümer einer Datei als numerische Benutzer-ID (UID) zurück – eine eingebaute PHP-Funktion.

Die Funktion fileowner() ist eine eingebaute PHP-Funktion, die den Eigentümer einer Datei als numerische Benutzer-ID (UID) zurückgibt – dieselbe UID, die das Betriebssystem in den Metadaten der Datei speichert. Sie ist das PHP-Äquivalent zum Anzeigen der Eigentümer-Spalte in ls -l. Diese Seite erläutert die Syntax, die Rückgabewerte, die häufige Falle veralteter Cache-Ergebnisse und wie die numerische UID in einen lesbaren Benutzernamen umgewandelt werden kann.

Syntax

fileowner(string $filename): int|false
  • $filename — der Pfad zur Datei (oder zum Verzeichnis), die untersucht werden soll. Er kann relativ oder absolut angegeben werden.
  • Gibt die Benutzer-ID des Eigentümers als int bei Erfolg zurück, oder false bei einem Fehler (zum Beispiel wenn die Datei nicht existiert oder das Skript keine Berechtigung hat, ihre Metadaten zu lesen).

Da eine gültige UID 0 sein kann (der root-Benutzer auf Unix-Systemen), sollte das Ergebnis immer mit dem strikten Operator === false verglichen werden, anstatt eine lockere Wahrheitsprüfung zu verwenden – andernfalls würde eine korrekte Datei im Besitz von root wie ein Fehler aussehen.

Einfaches Beispiel

<?php

$filename = __FILE__; // inspect the running script itself

$owner_id = fileowner($filename);

if ($owner_id === false) {
    echo "Failed to get the owner of the file.";
} else {
    echo "The owner of '$filename' has user ID $owner_id.";
}

Eine mögliche Ausgabe lautet:

The owner of '/var/www/example.php' has user ID 33.

Die genaue Zahl hängt davon ab, welches Betriebssystem-Konto die Datei erstellt hat oder besitzt (zum Beispiel ist 33 der Standard-Benutzer www-data auf vielen Debian/Ubuntu-Systemen).

Die UID in einen Benutzernamen umwandeln

Eine bloße Zahl ist selten das, was man einem Benutzer anzeigen möchte. Auf Unix-ähnlichen Systemen mit aktivierter POSIX-Erweiterung kann die UID an posix_getpwuid() übergeben werden, um die Kontodetails nachzuschlagen:

<?php

$uid = fileowner(__FILE__);

if ($uid !== false && function_exists('posix_getpwuid')) {
    $info = posix_getpwuid($uid);
    echo "Owner: {$info['name']} (UID {$uid})";
} else {
    echo "Owner UID: " . var_export($uid, true);
}

Dies gibt etwas wie Owner: www-data (UID 33) aus. Die POSIX-Erweiterung ist unter Windows nicht verfügbar, daher sollte der Aufruf wie gezeigt mit function_exists() abgesichert werden.

Achtung bei gecachten Ergebnissen

PHP speichert die Ergebnisse stat-basierter Funktionen (fileowner(), fileperms(), filegroup(), filesize() und ähnliche) aus Leistungsgründen im Cache. Wenn sich der Eigentümer der Datei während desselben Skriptlaufs ändert – zum Beispiel nach einem Aufruf von chown() – kann fileowner() den alten Wert zurückgeben. Leeren Sie den Cache zuerst mit clearstatcache():

<?php

$file = 'report.txt';

chown($file, 'nobody');     // change ownership
clearstatcache();           // discard the stale stat cache
$uid = fileowner($file);    // now reflects the new owner

Hinweise und Besonderheiten

  • Windows: Das Konzept eines numerischen POSIX-Eigentümers lässt sich nicht sauber auf Windows-ACLs abbilden. fileowner() gibt typischerweise 0 zurück, daher sollte es für Berechtigungslogik unter Windows nicht verwendet werden.
  • false vs. 0: 0 ist root (ein echter Eigentümer); false bedeutet, dass der Aufruf fehlgeschlagen ist. Verwenden Sie ===.
  • Mehr als nur den Eigentümer benötigt? stat() gibt das vollständige Metadaten-Array (Größe, Modus, Eigentümer, Gruppe, Zeitstempel) in einem einzigen Aufruf zurück, was günstiger ist als mehrere file*()-Funktionen separat aufzurufen.
  • Zugriff zuerst prüfen: Wenn Sie nur wissen müssen, ob Sie eine Datei lesen können, ist is_readable() das richtige Werkzeug – fileowner() beantwortet eine andere Frage.

Fazit

fileowner() ist eine kleine, aber nützliche Funktion zum Lesen des numerischen Eigentümers einer Datei in PHP. Vergleichen Sie das Ergebnis mit === false, denken Sie daran, dass 0 ein gültiger Eigentümer (root) ist, rufen Sie clearstatcache() nach einer Eigentümeränderung auf, und verwenden Sie posix_getpwuid(), wenn Sie den lesbaren Benutzernamen benötigen. Unter Windows ist das Ergebnis nicht aussagekräftig, daher sollte eigentümerbasierte Logik auf Unix-ähnliche Systeme beschränkt bleiben.

Übungen

Übung
Was ist der Zweck der Funktion fileowner() in PHP?
Was ist der Zweck der Funktion fileowner() in PHP?
Was this page helpful?