Una semplice Cache in PHP
229 visiteUna semplice Cache in PHP
In questo articolo vogliamo creare una semplice Cache in PHP.
Supponiamo che abbiamo creato una pagina PHP chiamata index.php dove è presente il nostro codice e ci siamo accorti che abbiamo bisogno di una cache.
Per risolvere il nostro problema creiamo 2 file:
- top-cache.php
- bottom-cache.php
top-cache.php
Il codice di top-cache.php sarà il seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
function getCurrUrl() { return $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI']; } $url = md5(full_url()); //Nome del file di cache $cachefile = 'cache/cached-'.$url.'.html'; //Tempo di vita di una cache in millisecondi $cachetime = 9000; // Invierà cache più giovani del $cachetime if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) { echo "<!-- Cached copy, generated ".date('H:i', filemtime($cachefile))." -->\n"; if ($_GET['nocache']=='1') { if ($_GET['reset']=='1') unlink($cachefile); } else { include($cachefile); exit; } } ob_start(); // Inizia l'output del buffer |
In pratica inseriamo prima della nostro codice un sistema che controlla l’esistenza della cache in base all’url corrente e in caso negativo la crea. Al prossimo ingresso tramite la stessa url il sistema non effettuerà più la stessa elaborazione ma si limiterà a mandare a video la pagina precedentemente “cachata” tramite un semplice include.
bottom-cache.php
La parte bottom della cache invece sarà composta dal codice seguente:
1 2 3 4 5 6 |
// Crea la cache in un file "$cachefile" $cached = fopen($cachefile, 'w'); fwrite($cached, ob_get_contents()); fclose($cached); // Invia l'output al browser ob_end_flush(); |
Il salvataggio dell’ output su file è stato possibile utilizzando i comandi nativi di PHP: ob_start() , ob_get_contents() e ob_end_flush() i quali mettono il contenuto della pagina in un buffer prima di inviarlo al browser.
I file di cache verranno creati in una directory /cache/ che dovrà avere i permessi di scrittura.
La nostra cache in PHP quindi diventerà la seguente:
1 2 3 4 5 |
include ("top-cache.php"); //Il nostro codice... include ("bottom-cache.php"); |