W3docs

filegroup()

La funzione filegroup() di PHP restituisce l'ID numerico del gruppo proprietario di un file come intero, o false in caso di errore.

La funzione filegroup() restituisce l'ID del gruppo proprietario di un file. Nei sistemi Unix-like ogni file appartiene a un utente e a un gruppo; filegroup() restituisce l'ID numerico di quel gruppo. Questo capitolo tratta la sintassi, il valore restituito, come convertire l'ID numerico in un nome di gruppo, i problemi comuni e il suo posto tra le altre funzioni PHP di ispezione dei file.

Sintassi

filegroup(string $filename): int|false

$filename è il percorso del file (o della directory) da ispezionare. In caso di successo la funzione restituisce l'ID del gruppo come intero. In caso di errore restituisce false.

Alcune cose da sapere fin dall'inizio:

  • L'ID del gruppo è un numero, non un nome. Sulla maggior parte dei sistemi 0 corrisponde al gruppo root/wheel, ma la corrispondenza esatta dipende dal sistema.
  • Il risultato viene memorizzato nella cache. PHP memorizza nella cache i dati di stat() per ogni file, quindi se il gruppo di un file cambia durante l'esecuzione dello script potrebbe essere necessario chiamare clearstatcache() per vedere il nuovo valore.
  • Su Windows il concetto di gruppo di file non è applicabile, e filegroup() non ha significato in quel contesto.

Esempio di base

<?php

$filename = __FILE__; // the script file itself — guaranteed to exist
$groupId = filegroup($filename);

echo "The group ID of $filename is $groupId";

L'uso di __FILE__ garantisce l'esistenza del percorso, quindi l'esempio è riproducibile. L'output è un numero del tipo:

The group ID of /var/www/example.php is 33

Convertire l'ID in un nome di gruppo

Un numero grezzo è raramente ciò che si desidera visualizzare. Nei sistemi con l'estensione POSIX è possibile risolverlo in un nome leggibile con posix_getgrgid():

<?php

$groupId = filegroup(__FILE__);

if ($groupId === false) {
    echo "Could not read the file group.";
} elseif (function_exists('posix_getgrgid')) {
    $group = posix_getgrgid($groupId);
    echo "Group name: " . $group['name']; // e.g. "www-data"
} else {
    echo "Group ID: $groupId";
}

Nota: posix_getgrgid() fa parte dell'estensione POSIX e non è disponibile su Windows. Proteggi sempre la chiamata con function_exists() se il codice potrebbe essere eseguito su piattaforme diverse.

Gestione degli errori

Quando il file non esiste o non è accessibile, filegroup() restituisce false e emette un E_WARNING. Poiché false potrebbe essere confuso con 0 (un ID di gruppo valido per root), controlla sempre con l'operatore === rigoroso:

<?php

$result = filegroup('does-not-exist.txt');

if ($result === false) {
    echo "Unable to determine the file group.";
} else {
    echo "Group ID: $result";
}

Per sopprimere l'avviso quando un file mancante è un caso previsto, verifica prima l'esistenza con file_exists(), anziché silenziarlo con l'operatore @.

Quando si usa questa funzione?

filegroup() è utile quando occorre verificare o controllare la proprietà dei file — ad esempio, per confermare che i file caricati o i file di cache generati appartengano al gruppo del server web (spesso www-data) in modo che il server possa leggerli e scriverli. Viene comunemente abbinata a:

  • fileowner() — l'ID utente proprietario del file.
  • fileperms() — i bit di permesso del file.
  • filetype() — se si tratta di un file, una directory, un link, ecc.
  • stat() — tutte le informazioni precedenti (e altro ancora) in una singola chiamata.

Conclusione

filegroup() restituisce l'ID numerico del gruppo di un file, oppure false in caso di errore. Combinala con posix_getgrgid() per visualizzare un nome di gruppo leggibile, confronta sempre il risultato con === per distinguere un errore da uno 0 legittimo, e ricorda clearstatcache() quando la proprietà potrebbe essere cambiata durante l'esecuzione dello script. Per un quadro più completo dei metadati di un file, usa fileowner(), fileperms() e stat().

Esercizio

Pratica
Cosa restituisce filegroup() quando il file non esiste?
Cosa restituisce filegroup() quando il file non esiste?
Was this page helpful?