W3docs

fileowner()

La fonction fileowner() en PHP retourne l'ID numérique du propriétaire d'un fichier. Apprenez la syntaxe, les valeurs de retour et les pièges courants.

La fonction fileowner() est une fonction PHP intégrée qui retourne le propriétaire d'un fichier sous forme d'identifiant utilisateur (UID) numérique — le même UID que le système d'exploitation stocke dans les métadonnées du fichier. Elle est l'équivalent PHP de la colonne propriétaire dans ls -l. Cette page explique la syntaxe, les valeurs de retour, le piège courant des résultats mis en cache, et comment convertir l'UID numérique en nom d'utilisateur lisible.

Syntaxe

fileowner(string $filename): int|false
  • $filename — le chemin vers le fichier (ou répertoire) à inspecter. Il peut être relatif ou absolu.
  • Retourne l'identifiant utilisateur du propriétaire sous forme d'int en cas de succès, ou false en cas d'échec (par exemple, si le fichier n'existe pas ou si le script n'a pas la permission de lire ses métadonnées).

Étant donné qu'un UID valide peut être 0 (l'utilisateur root sur les systèmes Unix), comparez toujours le résultat avec l'opérateur strict === false plutôt qu'une vérification de véracité souple — sinon un fichier appartenant à root parfaitement valide ressemblerait à une erreur.

Exemple de base

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

Un résultat possible est :

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

Le nombre exact dépend du compte OS qui a créé ou possède le fichier (par exemple, 33 est l'utilisateur www-data par défaut sur de nombreux systèmes Debian/Ubuntu).

Convertir l'UID en nom d'utilisateur

Un simple nombre est rarement ce que vous souhaitez afficher à un utilisateur. Sur les systèmes de type Unix avec l'extension POSIX activée, passez l'UID à posix_getpwuid() pour consulter les détails du compte :

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

Ceci affiche quelque chose comme Owner: www-data (UID 33). L'extension POSIX n'est pas disponible sous Windows, donc protégez l'appel avec function_exists() comme indiqué.

Attention aux résultats mis en cache

PHP met en cache les résultats des fonctions basées sur stat (fileowner(), fileperms(), filegroup(), filesize(), et autres) pour des raisons de performance. Si le propriétaire du fichier change pendant la même exécution du script — par exemple après un appel à chown()fileowner() peut retourner l'ancienne valeur. Videz d'abord le cache avec clearstatcache() :

<?php

$file = 'report.txt';

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

Notes et points à surveiller

  • Windows : le concept de propriétaire POSIX numérique ne correspond pas bien aux ACL Windows. fileowner() retourne généralement 0, donc ne vous fiez pas à cette valeur pour la logique de permissions sous Windows.
  • false vs. 0 : 0 correspond à root (un vrai propriétaire) ; false signifie que l'appel a échoué. Utilisez ===.
  • Besoin de plus que le propriétaire ? stat() retourne le tableau complet des métadonnées (taille, mode, propriétaire, groupe, horodatages) en un seul appel, ce qui est moins coûteux qu'appeler plusieurs fonctions file*() séparément.
  • Vérifiez l'accès d'abord : si vous avez seulement besoin de savoir si vous pouvez lire un fichier, is_readable() est le bon outil — fileowner() répond à une question différente.

Conclusion

fileowner() est une fonction petite mais utile pour lire le propriétaire numérique d'un fichier en PHP. Comparez son résultat avec === false, souvenez-vous que 0 est un propriétaire valide (root), appelez clearstatcache() après avoir changé la propriété, et utilisez posix_getpwuid() lorsque vous avez besoin du nom d'utilisateur lisible. Sous Windows, son résultat n'est pas significatif, donc réservez la logique basée sur le propriétaire aux systèmes de type Unix.

Pratique

Pratique
Quel est le rôle de la fonction fileowner() en PHP ?
Quel est le rôle de la fonction fileowner() en PHP ?
Was this page helpful?