W3docs

filegroup()

Die PHP-Funktion filegroup() gibt die Gruppen-ID einer Datei als Integer zurück oder false bei einem Fehler.

Die Funktion filegroup() gibt die Gruppen-ID der besitzenden Gruppe einer Datei zurück. Auf Unix-ähnlichen Systemen gehört jede Datei einem Benutzer und einer Gruppe; filegroup() liefert die numerische ID dieser Gruppe. Dieses Kapitel behandelt die Syntax, den Rückgabewert, die Umwandlung der numerischen ID in einen Gruppennamen, häufige Fallstricke sowie die Einordnung dieser Funktion unter PHPs andere Dateiinspektionsfunktionen.

Syntax

filegroup(string $filename): int|false

$filename ist der Pfad zur zu untersuchenden Datei (oder dem Verzeichnis). Bei Erfolg gibt die Funktion die Gruppen-ID als Integer zurück. Bei einem Fehler gibt sie false zurück.

Einige wichtige Hinweise vorab:

  • Die Gruppen-ID ist eine Zahl, kein Name. Auf den meisten Systemen ist 0 die Gruppe root/wheel, aber die genaue Zuordnung ist systemspezifisch.
  • Das Ergebnis wird zwischengespeichert. PHP speichert stat()-Daten pro Datei im Cache; ändert sich die Gruppe einer Datei während der Skriptausführung, muss möglicherweise clearstatcache() aufgerufen werden, um den neuen Wert zu sehen.
  • Unter Windows gilt das Konzept einer Dateigruppe nicht, und filegroup() ist dort nicht sinnvoll einsetzbar.

Einfaches Beispiel

<?php

$filename = __FILE__; // the script file itself — guaranteed to exist
$groupId = filegroup($filename);

echo "The group ID of $filename is $groupId";

Die Verwendung von __FILE__ stellt sicher, dass der Pfad existiert, sodass das Beispiel reproduzierbar ist. Die Ausgabe ist eine Zahl wie:

The group ID of /var/www/example.php is 33

Die ID in einen Gruppennamen umwandeln

Eine rohe Zahl ist selten das, was man anzeigen möchte. Auf Systemen mit der POSIX-Erweiterung kann sie mit posix_getgrgid() in einen lesbaren Namen aufgelöst werden:

<?php

$groupId = filegroup(__FILE__);

if ($groupId === false) {
    echo "Could not read the file group.";
} elseif (function_exists('posix_getgrgid')) {
    $group = posix_getgrgid($groupId);
    echo "Group name: " . $group['name']; // e.g. "www-data"
} else {
    echo "Group ID: $groupId";
}

Hinweis: posix_getgrgid() ist Teil der POSIX-Erweiterung und unter Windows nicht verfügbar. Sichern Sie den Aufruf immer mit function_exists() ab, wenn Ihr Code plattformübergreifend ausgeführt werden könnte.

Fehlerbehandlung

Wenn die Datei nicht existiert oder nicht zugänglich ist, gibt filegroup() false zurück und erzeugt eine E_WARNING. Da false mit 0 (einer gültigen Gruppen-ID für root) verwechselt werden könnte, sollte stets der strikte Operator === zum Vergleich verwendet werden:

<?php

$result = filegroup('does-not-exist.txt');

if ($result === false) {
    echo "Unable to determine the file group.";
} else {
    echo "Group ID: $result";
}

Um die Warnung zu unterdrücken, wenn eine fehlende Datei ein erwarteter Fall ist, prüfen Sie zunächst mit file_exists(), ob die Datei existiert, anstatt die Warnung mit dem Operator @ zu unterdrücken.

Wann ist diese Funktion sinnvoll?

filegroup() ist nützlich, wenn Sie Dateieigentümerschaft prüfen oder überprüfen möchten — zum Beispiel, um sicherzustellen, dass hochgeladene Dateien oder generierte Cache-Dateien zur Webserver-Gruppe (häufig www-data) gehören, damit der Server sie lesen und schreiben kann. Sie wird häufig zusammen mit folgenden Funktionen verwendet:

  • fileowner() — die Benutzer-ID, der die Datei gehört.
  • fileperms() — die Berechtigungsbits der Datei.
  • filetype() — ob es sich um eine Datei, ein Verzeichnis, einen Link usw. handelt.
  • stat() — all das (und mehr) in einem einzigen Aufruf.

Fazit

filegroup() gibt die numerische Gruppen-ID einer Datei zurück oder false bei einem Fehler. Kombinieren Sie sie mit posix_getgrgid(), um einen menschenlesbaren Gruppennamen anzuzeigen. Vergleichen Sie das Ergebnis stets mit ===, um einen Fehler von einer legitimen 0 zu unterscheiden, und denken Sie an clearstatcache(), wenn sich die Eigentümerschaft möglicherweise während der Skriptausführung geändert hat. Für ein vollständigeres Bild der Metadaten einer Datei greifen Sie auf fileowner(), fileperms() und stat() zurück.

Übungen

Übung
Was gibt filegroup() zurück, wenn die Datei nicht existiert?
Was gibt filegroup() zurück, wenn die Datei nicht existiert?
Was this page helpful?