HOWTO: Creare un file di cache in PHP

In questo sito, soprattutto nella homepage, sono presenti alcuni riquadri informativi, che mostrano automaticamente i post del blog più recenti, i commenti più recenti, gli ultimi video caricati su Youtube, l’ultima mia attività in bici, e simili.
Ogni volta che questi riquadri vengono caricati, in teoria, viene eseguito il codice che permette di mostrare quell’output. In realtà, per non dilatare i tempi di caricamento e sovraccaricare il sito, è più comodo creare dei file di CACHE, che ci permetteranno di conservare l’output già elaborato, per un certo numero di ore a nostro piacere.
In questo modo, per un ristretto lasso di tempo, verrà caricato l’output senza dover compiere lunghe operazioni in PHP/JSON/XML, o quanto altro serva allo scopo.
Questo è il modello che utilizzo di solito:
<?
$expiretime=300; // cache expire time in minutes
$cachename="file.cache"; //name of the cachefile
//create the cachefile if it doesn't exist
if (!file_exists($cachename)) {
$create = fopen($cachename, 'w');
chmod ("$cachename", 0644); //set chmod 644
fclose($create);
}
// Is the file older than $expiretime, or the file is new/empty?
$FileAge = time() - filectime($cachename); // Calculate file age in seconds
if ($FileAge > ($expiretime * 60) || 0 == filesize($cachename))
{
//do something [...]
//[...]
// Now refresh the cachefile with newer content
$output = //youroutput;
$handle = fopen($cachename, 'wb');
fwrite($handle, $output);
}
//cachefile is fresh enough... outputting data
$data=file_get_contents($cachename);
echo $data;
?>
In $expiretime si imposta il numero di minuti entro cui si dovrà utilizzare il file di cache, e dopo cui si procederà ad aggiornarla.
Ho lasciato i commenti in inglese, per permettere un uso più vasto di questo script.
Qualsiasi operazione di parsing, o quanto altro che serve per produrre l’output, va inserito dove ho scritto “//do something”.
La riga:
write($handle, $output);
andrà a scrivere il contenuto di $output nel file di cache.
E’uno script che ho scritto un bel po’ di tempo fa, ma risulta sempre utile…
Qualsiasi commento è il benvenuto!
