W3docs

lchgrp()

La función lchgrp() de PHP cambia la propiedad de grupo de un enlace simbólico, no del archivo al que apunta. Similar a chgrp().

La función lchgrp() de PHP cambia la propiedad de grupo del enlace simbólico en sí, no del archivo al que apunta el enlace. Esta página explica qué hace, en qué se diferencia de chgrp(), los parámetros que acepta, lo que devuelve y las reglas de permisos y plataforma que determinan si la llamada tiene éxito.

¿Qué es la función lchgrp()?

Un enlace simbólico (symlink) es un archivo pequeño que apunta a otra ruta. La mayoría de las funciones del sistema de archivos "siguen" el enlace y operan sobre el destino. lchgrp() es la excepción: el prefijo l significa que actúa sobre el nodo del enlace, dejando intacto el grupo del destino.

Esto es importante cuando el enlace y su destino pertenecen a grupos distintos, o cuando deseas administrar los permisos del enlace sin modificar el archivo al que hace referencia. Para el equivalente del propietario, consulta lchown(); para la versión que sigue al destino, consulta chgrp().

Sintaxis

lchgrp(string $filename, string|int $group): bool
ParámetroDescripción
$filenameRuta al enlace simbólico cuyo grupo deseas cambiar.
$groupEl nuevo grupo, indicado como un nombre de grupo ('staff') o un GID numérico (20).

Devuelve true en caso de éxito y false en caso de error. En caso de fallo, PHP también emite un E_WARNING.

Cómo usar lchgrp()

Pasa la ruta del enlace y el grupo destino, luego verifica el resultado booleano:

<?php

$link  = __DIR__ . '/data-current'; // a symlink, e.g. -> data-2026
$group = 'staff';

if (lchgrp($link, $group)) {
    echo "Link group changed to {$group}.";
} else {
    echo 'Could not change the link group.';
}

Dado que lchgrp() actúa sobre el enlace, el grupo del archivo data-2026 no cambia; solo lo hace el enlace simbólico data-current.

lchgrp() vs chgrp()

Ambas funciones comparten la misma firma pero difieren en lo que modifican:

<?php

// Acts on the LINK only:
lchgrp('/var/www/current', 'www-data');

// Follows the link and acts on the TARGET file/directory:
chgrp('/var/www/current', 'www-data');

Usa lchgrp() cuando necesites específicamente cambiar los metadatos del enlace simbólico y desees dejar la propiedad del destino tal como está.

Valor de retorno, permisos y plataformas

Un retorno true indica que el cambio se aplicó. Varias condiciones hacen que devuelva false (con una advertencia):

  • Permisos. Solo el propietario del enlace (o el superusuario) puede cambiar su grupo, y el usuario debe ser miembro del grupo destino. En la mayoría de los sistemas, esto significa que el script necesita efectivamente permisos de root.
  • La ruta debe ser un symlink. Si $filename es un archivo normal o no existe, la llamada falla.
  • Windows. La propiedad de grupo es un concepto POSIX, por lo que lchgrp() no es compatible de manera significativa en Windows.

Dado que los fallos son comunes en entornos compartidos, siempre bifurca según el valor de retorno en lugar de asumir el éxito. Para inspeccionar un enlace antes de modificarlo, is_link() y readlink() son herramientas complementarias útiles.

<?php

$link = '/var/www/current';

if (!is_link($link)) {
    echo "{$link} is not a symbolic link.";
} elseif (lchgrp($link, 'www-data')) {
    echo 'Group updated.';
} else {
    echo 'Update failed — check ownership and group membership.';
}

Conclusión

lchgrp() cambia el grupo de un enlace simbólico sin seguirlo hasta el destino — el equivalente consciente de symlinks de chgrp() y el equivalente de grupo de lchown(). Devuelve true o false, requiere la propiedad y membresía de grupo adecuadas, y no tiene efecto en Windows. Siempre verifica su valor de retorno y confirma que la ruta sea un enlace con is_link() antes de confiar en el resultado.

Práctica

Práctica
¿Qué es verdad sobre la función 'lchgrp()' en PHP según la información proporcionada en la página web de w3docs.com?
¿Qué es verdad sobre la función 'lchgrp()' en PHP según la información proporcionada en la página web de w3docs.com?
Was this page helpful?