lchgrp()
La funzione lchgrp() di PHP cambia la proprietà di gruppo di un collegamento simbolico senza seguire il file di destinazione.
La funzione PHP lchgrp() modifica la proprietà di gruppo del collegamento simbolico stesso, non del file a cui il collegamento punta. Questa pagina spiega cosa fa, come si differenzia da chgrp(), i parametri che accetta, i valori restituiti e le regole sui permessi e sulle piattaforme che determinano se la chiamata ha successo.
Cos'è la funzione lchgrp()?
Un collegamento simbolico (symlink) è un piccolo file che punta a un altro percorso. La maggior parte delle funzioni del filesystem "seguono" il collegamento e operano sul target. lchgrp() è l'eccezione: il prefisso l indica che agisce sul nodo del collegamento, lasciando inalterato il gruppo del target.
Questo è importante quando il collegamento e il suo target appartengono a gruppi diversi, o quando si vogliono gestire i permessi sul collegamento senza modificare il file a cui fa riferimento. Per l'equivalente relativo al proprietario, vedere lchown(); per la versione che segue il target, vedere chgrp().
Sintassi
lchgrp(string $filename, string|int $group): bool| Parametro | Descrizione |
|---|---|
$filename | Percorso del collegamento simbolico di cui si vuole cambiare il gruppo. |
$group | Il nuovo gruppo, specificato come nome di gruppo ('staff') o come GID numerico (20). |
Restituisce true in caso di successo e false in caso di errore. In caso di errore PHP emette anche un E_WARNING.
Come usare lchgrp()
Passa il percorso del collegamento e il gruppo di destinazione, quindi controlla il risultato 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.';
}Poiché lchgrp() opera sul collegamento, il gruppo del file data-2026 non cambia — viene modificato solo il symlink data-current.
lchgrp() vs chgrp()
Le due funzioni condividono la firma ma differiscono su ciò che modificano:
<?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() quando hai bisogno di modificare specificamente i metadati del symlink e vuoi lasciare invariata la proprietà del target.
Valore restituito, permessi e piattaforme
Un ritorno true indica che la modifica è stata applicata. Diverse condizioni fanno restituire false (con un avviso):
- Permessi. Solo il proprietario del collegamento (o il superutente) può modificarne il gruppo, e l'utente deve essere membro del gruppo di destinazione. Nella maggior parte dei sistemi questo significa che lo script ha effettivamente bisogno dei privilegi
root. - Il percorso deve essere un symlink. Se
$filenameè un file normale o non esiste, la chiamata fallisce. - Windows. La proprietà di gruppo è un concetto POSIX, quindi
lchgrp()non è significativamente supportata su Windows.
Poiché i fallimenti sono comuni negli ambienti condivisi, esegui sempre un controllo sul valore restituito anziché presumere il successo. Per esaminare un collegamento prima di modificarlo, is_link() e readlink() sono utili strumenti complementari.
<?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.';
}Conclusione
lchgrp() modifica il gruppo di un collegamento simbolico senza seguirlo fino al target — la controparte consapevole dei symlink di chgrp() e l'equivalente di gruppo di lchown(). Restituisce true o false, richiede la proprietà appropriata e l'appartenenza al gruppo, ed è un no-op su Windows. Controlla sempre il valore restituito e verifica che il percorso sia un collegamento con is_link() prima di fare affidamento sul risultato.