W3docs

is_readable()

La funzione is_readable() è una funzione PHP integrata che verifica se un file è leggibile, restituendo true se leggibile e false altrimenti.

La funzione is_readable() indica se PHP può leggere un determinato file o directory prima di tentare di aprirlo. Controlla che il percorso esista e che il processo corrente abbia il permesso di lettura su di esso. Chiamarla prima consente di gestire gli errori in modo elegante anziché generare un avviso di runtime da fopen() o file_get_contents().

Questo capitolo tratta la sintassi, il valore restituito, un esempio eseguibile, i problemi più comuni (caching, permessi, race condition) e come is_readable() si relaziona alle altre funzioni del filesystem PHP.

Sintassi

is_readable(string $filename): bool
ParteSignificato
$filenamePercorso del file o della directory da verificare. Può essere assoluto (/var/www/data.txt) o relativo alla directory di lavoro dello script.
Restituiscetrue se il percorso esiste ed è leggibile dall'utente/processo corrente, false altrimenti.

is_readable() funziona anche sulle directory: restituisce true quando la directory può essere aperta ed elencata.

Esempio di base

php— editable, runs on the server

La funzione restituisce un valore boolean, quindi si legge naturalmente all'interno di una condizione if: si sceglie il ramo in base alla possibilità di leggere il file senza mai aprirlo.

Un esempio completo ed eseguibile

L'esempio precedente punta a un percorso che potrebbe non esistere. Ecco una versione che puoi eseguire ovunque — crea un file, lo verifica, poi verifica un percorso che non esiste:

<?php

// Create a temp file we know is readable.
$file = tempnam(sys_get_temp_dir(), 'demo');
file_put_contents($file, 'hello');

var_dump(is_readable($file));            // bool(true)
var_dump(is_readable('/no/such/file'));  // bool(false)

unlink($file); // clean up

La prima chiamata è true perché il file esiste e l'abbiamo appena creato con i nostri permessi; la seconda è false perché il percorso non esiste affatto.

Proteggere una lettura di file

L'utilizzo tipico nel mondo reale è una protezione prima della lettura, in modo che un file mancante o non leggibile non emetta un avviso:

<?php

$path = 'config.json';

if (!is_readable($path)) {
    // Handle the problem your way: log, default, or throw.
    throw new RuntimeException("Cannot read config file: $path");
}

$config = json_decode(file_get_contents($path), true);

Problemi comuni

  • I risultati vengono memorizzati nella cache. PHP memorizza nella cache le informazioni stat per ogni richiesta. Se modifichi i permessi di un file durante la stessa esecuzione dello script, chiama clearstatcache() prima di controllare di nuovo, altrimenti potresti ottenere una risposta obsoleta.
  • true non è una garanzia. I permessi possono cambiare tra il controllo e la lettura effettiva (una race condition time-of-check to time-of-use). Per il codice critico, è meglio tentare direttamente la lettura e gestire l'errore, piuttosto che affidarsi esclusivamente a is_readable().
  • Restituisce false per i percorsi inesistenti — senza avvisi. Quindi is_readable() funge anche da controllo "esiste e posso leggerlo". Per verificare l'esistenza indipendentemente dai permessi, usa file_exists().
  • I permessi vengono valutati per l'utente del server web (spesso www-data), non per l'utente della shell, quando lo script viene eseguito sotto un server web.

Funzioni correlate

  • is_writable() — la controparte per il permesso di scrittura.
  • is_file() — verifica che il percorso sia un file regolare (non una directory).
  • file_exists() — verifica l'esistenza, ignorando il permesso di lettura.
  • fopen() e file_get_contents() — le funzioni che tipicamente si proteggono con is_readable().

Conclusione

is_readable() è un modo leggero e privo di effetti collaterali per verificare che un percorso esista e possa essere letto prima di aprirlo. Usala come protezione per gestire gli errori in modo elegante, ricorda che i suoi risultati vengono memorizzati nella cache all'interno di una richiesta, e per il codice critico per la sicurezza tenta la lettura e gestisci gli errori anziché fidarti solo del controllo.

Pratica

Pratica
Cosa fa la funzione is_readable() in PHP?
Cosa fa la funzione is_readable() in PHP?
Was this page helpful?