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!