Fabio Donatantonio

Resta connesso

Software Developer / Adjunct Professor

Gestione della cache con 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.

Fabio Donatantonio

Fabio Donatantonio. Analista e sviluppatore full-stack di applicazioni web in linguaggio PHP. Professore a Contratto per le cattedre di Fondamenti di Informatica e Archivistica Digitale presso Università degli Studi eCampus. Dal 2008 curatore del sito www.donatantonio.net, da sempre appassionato di programmazione, mare, sigari e... musica.

Ti potrebbe piacere anche

Leave a reply

Your email address will not be published. Required fields are marked *

 

Didattica

Università degli Studi eCampus
Data Evento
05/07/2019
11:30
Esame Archivistica Digitale e Informatica per le Scienze Umane - Cds Filologia Moderna - Lettere - Novedrate(CO)
05/07/2019
11:30
Esame Introduzione all'Archivistica Digitale e all'Informatica per le Scienze Umane - Cds Letteratura, Arte, Musica e Spettacolo - Lettere - Novedrate(CO)
05/07/2019
11:30
Esame Abilità Informatiche e Telematiche - Cds Design e Discipline della Moda - Lettere - Novedrate(CO)
12/07/2019
11:30
Esame Introduzione all'Archivistica Digitale e all'Informatica per le Scienze Umane - Cds Letteratura, Arte, Musica e Spettacolo - Lettere - Roma
12/07/2019
11:30
Esame Archivistica Digitale e Informatica per le Scienze Umane - Cds Filologia Moderna - Lettere - Roma
12/07/2019
11:30
Esame Abilità Informatiche e Telematiche - Cds Design e Discipline della Moda - Lettere - Roma
Risorse
Guida HTML/CSS per principianti (link)
Introduzione agli ipertesti (link)
Esercizi guidati in Java (link)
Intelligenza artificiale (link)
Libri
Fondamenti di Informatica (2011) (link)
Informatica per le Scienze Umane (2011) (link)
Fondamenti di Informatica (2014) (link)
Pagina Docente
uniecampus.it - Scheda Docente (link)
Contatti
fabio.donatantonio[at]uniecampus.it

JWhisper, sviluppato presso il Dipartimento di Informatica Applicata dell'Università degli Studi di Salerno:

Stay Connected

Twitter

Le mie foto

Foto di Fabio Donatantonio
×