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
falsein caso di errore (ad esempio, il file non esiste o non si dispone dei permessi per eseguirestat). Poichéfalseè un valore PHP valido, confronta sempre il risultato con!== falseanziché 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()
- Chiama
fileatime(), passando il percorso del file da controllare. - Verifica il risultato rispetto a
falseprima di usarlo, in modo che un file mancante non produca un avviso quando lo passi adate(). - 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 upQuesto 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:
| Funzione | Restituisce | Aggiornato quando… |
|---|---|---|
fileatime() | Orario dell'ultimo accesso | Il contenuto del file viene letto |
filemtime() | Orario dell'ultima modifica | Il 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().
Riepilogo
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().