W3docs

fileatime()

La funzione fileatime() di PHP restituisce l'ultimo orario di accesso a un file come timestamp Unix intero.

Cosa fa la funzione fileatime()

La funzione fileatime() è una funzione PHP integrata che restituisce l'ultimo orario di accesso a un file — il momento in cui il suo contenuto è stato letto l'ultima volta. Il valore viene restituito come timestamp Unix intero (il numero di secondi trascorsi dal 1° gennaio 1970, UTC), che in genere si formatta con date() prima di mostrarlo all'utente.

Questa pagina tratta la sintassi, il valore restituito, un esempio eseguibile, le differenze tra l'orario di accesso e i correlati orari di modifica e cambio, e il problema della cache che inganna la maggior parte degli sviluppatori.

Sintassi

fileatime(string $filename): int|false
  • $filename — il percorso del file da esaminare. Può essere relativo (risolto rispetto alla directory di lavoro dello script) o assoluto.
  • Valore restituito — un timestamp Unix intero in caso di successo, oppure false in caso di errore (ad esempio, il file non esiste o non si dispone dei permessi per eseguire stat). Poiché false è un valore PHP valido, confronta sempre il risultato con !== false anziché fare un semplice controllo di veridicità.

Avvertenza sugli orari di accesso su Linux. Nei moderni sistemi Linux, le opzioni di mount come noatime o relatime impediscono deliberatamente l'aggiornamento dell'orario di accesso ad ogni lettura, per ridurre le scritture su disco. Se fileatime() non cambia dopo aver letto un file, è la configurazione del filesystem che opera così — non un bug nel codice.

Come usare fileatime()

  1. Chiama fileatime(), passando il percorso del file da controllare.
  2. Verifica il risultato rispetto a false prima di usarlo, in modo che un file mancante non produca un avviso quando lo passi a date().
  3. Formatta il timestamp con date() per trasformarlo in una stringa leggibile.
<?php

// Create a small file so the example is self-contained and runnable.
$filename = 'example.txt';
file_put_contents($filename, "Hello, fileatime!\n");

// Read it back to register an access.
$contents = file_get_contents($filename);

$lastAccess = fileatime($filename);

if ($lastAccess !== false) {
    $when = date('Y-m-d H:i:s', $lastAccess);
    echo "The file {$filename} was last accessed on {$when}.\n";
} else {
    echo "Could not read the access time for {$filename}.\n";
}

unlink($filename); // tidy up

Questo script crea example.txt, lo legge, poi chiede a fileatime() quando è stato effettuato l'ultimo accesso. Il controllo !== false garantisce che un file mancante o non leggibile venga gestito correttamente senza emettere avvisi. L'output ha questo aspetto:

The file example.txt was last accessed on 2026-06-21 10:42:07.

fileatime() vs. filemtime() vs. filectime()

PHP espone tre timestamp strettamente correlati. Scegliere quello giusto è importante:

FunzioneRestituisceAggiornato quando…
fileatime()Orario dell'ultimo accessoIl contenuto del file viene letto
filemtime()Orario dell'ultima modificaIl contenuto del file viene scritto/modificato
filectime()Orario dell'ultimo cambiamento di inode (cambio di stato)Il contenuto o i metadati (permessi, proprietario, rinominazione) cambiano

Se vuoi sapere "quando qualcuno ha aperto il file l'ultima volta", usa fileatime(). Se vuoi sapere "quando i dati sono cambiati l'ultima volta" (il caso comune per l'invalidazione della cache), usa filemtime().

Il problema della cache

PHP memorizza nella cache il risultato delle funzioni di stato dei file come fileatime(), filemtime() e stat() per tutta la durata di una richiesta. Se leggi un file di nuovo e controlli il suo orario di accesso nello stesso script, potresti ottenere un valore obsoleto. Svuota la cache con clearstatcache() prima di rileggere:

<?php

$filename = 'example.txt';
file_put_contents($filename, "data\n");

$first = fileatime($filename);

clearstatcache();                       // force a fresh stat() next time
$contents = file_get_contents($filename);
clearstatcache();
$second = fileatime($filename);

echo ($second >= $first)
    ? "Access time is fresh.\n"
    : "Access time looks stale.\n";

unlink($filename);

Quando usarla?

  • Controllare quali file sono stati letti di recente (rotazione dei log, pulizia dei file "usati meno di recente").
  • Individuare upload o file temporanei inutilizzati che si possono eliminare in sicurezza.
  • Diagnosticare se un processo sta effettivamente accedendo a un file che ci si aspetta tocchi.

Per la logica basata sulle modifiche (ricostruire una cache quando i dati sorgente cambiano), usa filemtime(). Per verificare che un file esista prima di chiamare una di queste funzioni, abbinale a file_exists(). Per il set completo di metadati in una sola chiamata, vedi stat().

fileatime() restituisce il timestamp Unix dell'ultimo accesso a un file, oppure false in caso di errore. Controlla sempre il risultato con !== false, formattalo con date(), e tieni a mente due insidie: i mount Linux potrebbero sopprimere gli aggiornamenti dell'orario di accesso, e PHP memorizza nella cache i risultati di stat all'interno di una richiesta a meno che non chiami clearstatcache().

Pratica

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