W3docs

fileowner()

La función fileowner() de PHP devuelve el propietario de un archivo como ID de usuario numérico. Aprende su sintaxis, valores de retorno y uso correcto.

La función fileowner() es una función integrada de PHP que devuelve el propietario de un archivo como un ID de usuario (UID) numérico — el mismo UID que el sistema operativo almacena en los metadatos del archivo. Es el equivalente en PHP de observar la columna de propietario en ls -l. Esta página explica la sintaxis, los valores de retorno, el problema común de los resultados en caché obsoletos y cómo convertir el UID numérico en un nombre de usuario legible.

Sintaxis

fileowner(string $filename): int|false
  • $filename — la ruta al archivo (o directorio) a inspeccionar. Puede ser relativa o absoluta.
  • Devuelve el ID de usuario del propietario como un int en caso de éxito, o false en caso de error (por ejemplo, si el archivo no existe o el script no tiene permiso para leer sus metadatos).

Dado que un UID válido puede ser 0 (el usuario root en sistemas Unix), compara siempre el resultado con el operador estricto === false en lugar de una verificación de veracidad flexible — de lo contrario, un archivo propiedad de root perfectamente válido parecería un error.

Ejemplo básico

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

Una posible salida es:

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

El número exacto depende de qué cuenta del sistema operativo creó o es propietaria del archivo (por ejemplo, 33 es el usuario predeterminado www-data en muchos sistemas Debian/Ubuntu).

Convertir el UID en un nombre de usuario

Un número sin contexto rara vez es lo que se quiere mostrar a un usuario. En sistemas similares a Unix con la extensión POSIX habilitada, pasa el UID a posix_getpwuid() para buscar los detalles de la cuenta:

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

Esto imprime algo como Owner: www-data (UID 33). La extensión POSIX no está disponible en Windows, así que protege la llamada con function_exists() como se muestra.

Cuidado con los resultados en caché

PHP almacena en caché los resultados de las funciones basadas en stat (fileowner(), fileperms(), filegroup(), filesize() y similares) por motivos de rendimiento. Si el propietario del archivo cambia durante la misma ejecución del script — por ejemplo, después de llamar a chown()fileowner() puede devolver el valor antiguo. Limpia primero la caché con clearstatcache():

<?php

$file = 'report.txt';

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

Notas y consideraciones

  • Windows: el concepto de propietario POSIX numérico no se corresponde bien con las ACL de Windows. fileowner() normalmente devuelve 0, así que no dependas de ello para la lógica de permisos en Windows.
  • false vs. 0: 0 es root (un propietario real); false significa que la llamada falló. Usa ===.
  • ¿Necesitas más que el propietario? stat() devuelve el array completo de metadatos (tamaño, modo, propietario, grupo, marcas de tiempo) en una sola llamada, lo cual es más eficiente que llamar a varias funciones file*() por separado.
  • Verifica el acceso primero: si solo necesitas saber si puedes leer un archivo, is_readable() es la herramienta adecuada — fileowner() responde una pregunta diferente.

Conclusión

fileowner() es una función pequeña pero útil para leer el propietario numérico de un archivo en PHP. Compara su resultado con === false, recuerda que 0 es un propietario válido (root), llama a clearstatcache() después de cambiar la propiedad, y usa posix_getpwuid() cuando necesites el nombre de usuario legible. En Windows su resultado no es significativo, así que reserva la lógica basada en propietarios para sistemas similares a Unix.

Práctica

Práctica
¿Cuál es el propósito de la función fileowner() en PHP?
¿Cuál es el propósito de la función fileowner() en PHP?
Was this page helpful?