Chose Language:
Author: Admin/Publisher |finished | checked

PHP chown

Tal cual ocurre en Linux, chown (change owner) cambia el dueño o propietario del archivo o directorio que especifiquemos.

Atención: el uso de la función 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.
Description / Descripción
chown(string $filename, string|int $user): bool

Intenta cambiar el propietario de $filename por el usuario $user.

Solo el superusuario puede cambiar el propietario de un fichero(archivo o directorio(carpeta)).

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.

Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category