W3docs

filegroup()

La fonction filegroup() est une fonction PHP intégrée qui retourne l'ID de groupe du fichier sous forme d'entier.

La fonction filegroup() retourne l'ID de groupe du groupe propriétaire d'un fichier. Sur les systèmes de type Unix, chaque fichier appartient à un utilisateur et à un groupe ; filegroup() vous donne l'identifiant numérique de ce groupe. Ce chapitre couvre sa syntaxe, sa valeur de retour, comment convertir l'ID numérique en nom de groupe, les erreurs courantes et sa place parmi les autres fonctions PHP d'inspection de fichiers.

Syntaxe

filegroup(string $filename): int|false

$filename est le chemin vers le fichier (ou répertoire) à inspecter. En cas de succès, la fonction retourne l'ID de groupe sous forme d'entier. En cas d'échec, elle retourne false.

Quelques points importants à connaître :

  • L'ID de groupe est un nombre, pas un nom. Sur la plupart des systèmes, 0 correspond au groupe root/wheel, mais le mappage exact dépend du système.
  • Le résultat est mis en cache. PHP met en cache les données stat() par fichier ; ainsi, si le groupe d'un fichier change pendant l'exécution du script, vous devrez peut-être appeler clearstatcache() pour voir la nouvelle valeur.
  • Sur Windows, la notion de groupe de fichiers ne s'applique pas et filegroup() n'y est pas pertinent.

Exemple de base

<?php

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

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

L'utilisation de __FILE__ garantit que le chemin existe, ce qui rend l'exemple reproductible. La sortie est un nombre tel que :

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

Convertir l'ID en nom de groupe

Un nombre brut est rarement ce que vous souhaitez afficher. Sur les systèmes disposant de l'extension POSIX, vous pouvez le résoudre en un nom lisible avec posix_getgrgid() :

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

Remarque : posix_getgrgid() fait partie de l'extension POSIX et n'est pas disponible sous Windows. Protégez toujours l'appel avec function_exists() si votre code est susceptible de s'exécuter sur plusieurs plateformes.

Gestion des erreurs

Lorsque le fichier n'existe pas ou est inaccessible, filegroup() retourne false et émet un E_WARNING. Comme false pourrait être confondu avec 0 (un ID de groupe valide pour root), vérifiez toujours avec l'opérateur strict === :

<?php

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

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

Pour supprimer l'avertissement lorsqu'un fichier manquant est un cas attendu, vérifiez d'abord son existence avec file_exists() plutôt que de le masquer avec l'opérateur @.

Dans quels cas l'utiliser ?

filegroup() est utile lorsque vous devez auditer ou vérifier la propriété des fichiers — par exemple, pour confirmer que les fichiers téléversés ou les fichiers de cache générés appartiennent au groupe du serveur web (souvent www-data) afin que le serveur puisse les lire et les écrire. Elle est souvent associée à :

  • fileowner() — l'ID utilisateur propriétaire du fichier.
  • fileperms() — les bits de permissions du fichier.
  • filetype() — indique s'il s'agit d'un fichier, d'un répertoire, d'un lien, etc.
  • stat() — toutes les informations ci-dessus (et plus encore) en un seul appel.

Conclusion

filegroup() retourne l'ID de groupe numérique d'un fichier, ou false en cas d'échec. Combinez-la avec posix_getgrgid() pour afficher un nom de groupe lisible, comparez toujours le résultat avec === pour distinguer un échec d'un 0 légitime, et n'oubliez pas clearstatcache() lorsque la propriété peut avoir changé en cours de script. Pour une vue complète des métadonnées d'un fichier, utilisez fileowner(), fileperms() et stat().

Entraînement

Pratique
Que retourne filegroup() quand le fichier n'existe pas ?
Que retourne filegroup() quand le fichier n'existe pas ?
Was this page helpful?