PHP chown
Tal cual ocurre en Linux, chown (change owner) cambia el dueño o propietario del archivo o directorio que especifiquemos.
chown cambiar el propietario de un archivo o directorio, realizar cambios sin la debida prudencia puede tener implicaciones en la seguridad y el acceso a los archivos.
chown(string $filename, string|int $user): bool
Intenta cambiar el propietario de $filename por el usuario $user.
Parámetros
$filename – La ruta hacia el fichero.
$user – Un nombre o número de usuario.
Retornos
Nos retornará true en caso de éxito
Retornará false en caso de error.
Aplicar PHP chown Recursivamente
Algo que tenemos que tener en cuenta es que no podemos correr un chown con PHP de forma recursiva, así que deberemos realizar una función que cumpla con este propósito
En esta ocacion se me ocurrio probar chatGPT a ver qué tal hace esto, el siguiente código es generado con ChatGPT:
función para cambiar recursivamente el propietario de un fichero
function cambiarPropietarioRecursivo($directorio, $propietario) {
if (!is_dir($directorio)) {
return;
}
// Cambiar propietario del directorio actual
chown($directorio, $propietario);
$archivos = scandir($directorio);
foreach ($archivos as $archivo) {
if ($archivo === '.' || $archivo === '..') {
continue;
}
$rutaArchivo = $directorio . '/' . $archivo;
if (is_dir($rutaArchivo)) {
cambiarPropietarioRecursivo($rutaArchivo, $propietario);
} else {
chown($rutaArchivo, $propietario);
}
}
}
// Uso de la función para cambiar propietarios de forma recursiva
$rutaDirectorio = '/ruta/al/directorio';
$nuevoPropietario = 'nuevo_usuario';
cambiarPropietarioRecursivo($rutaDirectorio, $nuevoPropietario);
Cabe destacar que la función que creo, tiene bastante sentido, chequea si es un directorio primero y utiliza también la función scandir para obtener los archivos del directorio, lo que no estoy seguro si scandir devuelve . y .. pero la función parece cumplir con el propósito que queríamos.
Ejemplos de chown simples
El siguiente ejemplo cambia el propietario de un directorio, pero no cambia el propietario de sus hijos (archivos y directorios)
Cambia el propietario de un directorio
$rutaDirectorio = '/ruta/al/directorio';
$nuevoPropietario = 'nuevo_usuario';
if (chown($rutaDirectorio, $nuevoPropietario)) {
echo "El propietario del directorio se ha cambiado exitosamente.";
} else {
echo "No se pudo cambiar el propietario del directorio.";
}
Cambiando el propietario de un Archivo
Utilizando el nombre de usuario
$ruta = '/ruta/al/archivo.txt';
$nuevoPropietario = 'nuevo_usuario';
if (chown($ruta, $nuevoPropietario)) {
echo "El propietario del archivo se ha cambiado exitosamente.";
} else {
echo "No se pudo cambiar el propietario del archivo.";
}
Utilizando la id de usuario
$ruta = '/ruta/al/archivo.txt';
$nuevoPropietario = 1001; // ID de usuario
if (chown($ruta, $nuevoPropietario)) {
echo "El propietario del archivo se ha cambiado exitosamente.";
} else {
echo "No se pudo cambiar el propietario del archivo.";
}
Ejercicio
Crea una carpeta con 5 elementos dentro de esta manera:
- carpeta 1
- ArchivoCarpeta1
- Carpeta 2
- Archivo1
- Archivo2
- Archivo3
Utiliza, la función creada en el ejemplo de función recursiva, de tal forma que si es un archivo cambie su propietario también, para ello deberás crear funciones y modificar la función cambiarPropietarioRecursivo.

