PHP chown function
Just as on Linux, chown
(change owner) in PHP changes the owner of the specified file or directory.
chown
function to change the owner of a file or directory can have implications on security and file access. It’s important to exercise caution when making changes. Please note that this function does not work on Windows.
chown(string $filename, mixed $user): bool
Try to change the owner of $filename
as the user $user
.
Parameters
$filename
– The path to the file.
$user
– A username or user ID.
Returns
It will return true
on success.
It will return false
in case of an error.
Applying PHP chown recursively
Something to keep in mind is that we cannot run chown
recursively with PHP, so we will need to create a function that fulfills this purpose.
On this occasion, I thought of testing ChatGPT to see how well it performs. The following code is generated with 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);
It is worth mentioning that the function I created makes a lot of sense. It checks if it is a directory first and also uses the scandir
function to get the files in the directory. However, I’m not sure if scandir returns “.” and “..”, but the function seems to fulfill the purpose we wanted.
Examples of simple chown commands.
The following example changes the owner of a directory, but does not change the owner of its children (files and directories).
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."; }
Changing the owner of a file.
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."; }
Exercise
Create a folder with 5 elements in the following way:
- folder 1
- file1
- folder 2
- file2
- file3
- file4
Use the function created in the recursive function example in such a way that if it is a file, change its owner as well. To do this, you will need to create functions and modify the cambiarPropietarioRecursivo
function.