Fabio Donatantonio

Gestione della cache con PHP  

realizzato da , il 05 nov. 2010, categoria PHP

PHP

In questo articolo realizzeremo una classe PHP per gestire la cache delle nostre pagine web.
L’obiettivo sarà quello di mettere in cache una pagina intera o parte di essa per essere poi riutilizzata ad una successiva richiesta che rientri in un tempo limite da noi preventivamente scelto. Questa tecnica, sapientemente utilizzata, evita l’esecuzione di script “pesanti” che vengono richiamati frequentemente, soprattutto qualora i dati rappresentati non subiscono variazioni nel breve termine.
La classe phpCache avrà i seguenti metodi:

  • start() – Per avviare il processo di cache della pagina
  • stop() – Per concludere il processo di cache della pagina
  • paginaCorrente() – Per prelevare il nome della pagina corrente

Inoltre il costruttore della classe acquisisce due parametri:

  • Il periodo di validità di un file in cache (espresso in minuti)
  • Il percorso relativo per la cartella di cache

In fondo all’articolo è possibile provare e scaricare il codice completo.

Vediamo subito il codice della classe PhpCache:

<?php
class PhpCache{
	var $durata;
	var $cache_url;
	var $nome_pagina;

	/*
                Costruttore - i parametri sono:
	   i minuti di vita della cache e il percorso della cartella di cache
	*/
	function PhpCache($minuti,$percorso){
		$this->durata = intval($minuti) * 60;
		$this->cache_url = $percorso;
	}

	// Funzione di start della cache
	function start(){
		// Start dell'output buffer
		ob_start();
		// prelevo il nome della pagina attuale e creo il percorso nella cache
		$this->nome_pagina = $this->cache_url."".$this->paginaCorrente();
		/* se il file esiste in cache e la versione è ancora valida rispetto al tempo di vita
		   allora includo il file in cache e non vado oltre
		*/
		if (file_exists($this->nome_pagina) && ((time() - $this->durata) < filemtime($this->nome_pagina)))
		{
			include($this->nome_pagina);
			exit;
		}
	}

             // Funzione di stop della cache
	function stop(){
		// Scriviamo il contenuto del buffer nel file di cache
		$file = fopen($this->nome_pagina, 'w');
		fwrite($file, ob_get_contents());
		fclose($file);
		// Chiudiamo il buffer
		ob_end_flush();
	}

	// Metodo che restituisce il nome della pagina [eventuali parametri compresi]
	function paginaCorrente() {
		$pagina_corrente = $_SERVER["SERVER_NAME"].$_SERVER['REQUEST_URI'];
		$pezzi = explode("/",$pagina_corrente);
		$pagina_corrente = $pezzi[count($pezzi)-1];
		return $pagina_corrente;
	}
}
?>

Per capire come funziona questa classe possiamo innanzitutto dire che:
tutto il codice compreso tra la chiamata al metodo start() e la chiamata al metodo stop() viene messo in cache

Lo start() ha innanzitutto il compito di aprire un buffer di output (ob_start()) in modo da convogliare tutto il codice di echo e html in una unica variabile, inoltre verificare se la pagina richiesta sia già presente in cache e sia ancora valida:

ob_start();
$this->nome_pagina = $this->cache_url."".$this->paginaCorrente();
if (file_exists($this->nome_pagina) && ((time() - $this->durata) < filemtime($this->nome_pagina)))
{
	include($this->nome_pagina);
	exit;
}

A tale scopo è di supporto il metodo paginaCorrente() che restituisce il nome della pagina richiesta, compreso di eventuali parametri in GET.
Il metodo di stop() ha il compito di salvare il contenuto del buffer nel file in cache, in modo tale che ad una nuova apertura della pagina il metodo di start() possa verificarne la presenza.

La classe va utilizzata quindi nel seguente modo:

require_once('phpCache.php');

$cache = new PhpCache(10,'cache/');
$cache->start();

// segue il codice php/html
// ...

$cache->stop();

Nel costruttore abbiamo, ad esempio, scelto di rendere validi i file in cache per 10 minuti e salvare quest’ultimi in una cartella denominata cache/.

In conclusione è possibile scaricare e provare il codice. A tal proposito si consiglia di verificare il salvataggio in cache della pagina d’esempio controllando l’orario che questa stampa a video.

Cliccando qui è possibile vedere in azione il codice.

Cliccando qui è possibile scaricare il codice.

Leggi gli articoli correlati:

  1. Esercizio 6 – Gestione conto bancario (con interessi)
  2. Esercizio 4 – Cliente e gestione Conto Bancario
  3. URL della pagina corrente
  4. Costruire un orologio con cicli di temporizzazione
  5. Gestione dei link con Javascript

Invia questo articolo Invia ad un amico (Send this to a friend)
 Stampa questo articolo (Print now)  Stampa questo articolo (Print now)
:, , ,
Ti � piaciuto? Ti è piaciuto quest'articolo, guida o riflessione? Scoprine tanti altri nel menu articoli.

Torna sopra ↑

Spazio Pubblicitario

Commenta l'articolo - Ti risponderò in privato

Compila il modulo anti-spam sottostante

 

Fabio Donatantonio - Salerno - Città di Castello (PG) - fabio@donatantonio.net
Torna sopra ↑