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 ficherofunction 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
.