Caching delle pagine web in PHP
Pagina 1 di 4
1. Funzioni per il controllo dell'output
In questo articolo vedremo come creare un sistema per la gestione interna della cache per le nostre pagine dinamiche in PHP.
Per chi non lo sapesse la cache è una specie di memoria temporanea in cui vengono archiviati dati (già utilizzati) al fine di poterli recuperare velocemente qualora debbano essere riutilizzati.
Scopo di questo nostro articolo è, infatti, la memorizzazione degli output dei nostri script (che richiedono tempo e fatica per il server) all'interno di file temporanei al fine di poter essere riutilizzati senza nuovo sforzo di elaborazione da parte del nostro server.
Un simile espediente è molto utile al fine di abbassare il carico di lavoro del server e di rendere il nostro sito web più veloce e, quindi, più facilmente fruibile da parte dei nostri utenti.
Prima di passare alla pratica ritengo opportuno una breve introduzione teorica alle funzioni per la gestione del output con PHP.
Le funzioni per il controllo dell'output consentono di monitorare i risultati derivanti dagli output degli script, in particolar modo quando si tratta di dover inviare intestazioni al browser in seguito all'esecuzione del codice dinamico.
Per utilizzare questo tipo di funzioni non è necessario avvalersi di alcuna libreria esterna, PHP prevede nativamente il controllo degli output nel suo core, non ci sarà quindi bisogno di alcuna installazione.
Gli effetti di queste funzioni sono regolati da tre diverse voci presenti nel file di configurazione di PHP (PHP.INI):
- output_buffering: direttiva settata di default su "0"; se abilitata attiva l'output buffering per tutti i file. E' possibile limitare la dimensione del buffer a una dimensione stabilita dall'utente specificando il numero massimo di bytes previsti (ad esempio: "output_buffering=4096"). A questa voce è possibile associare un valore booleano o intero.
- output_handler: consente di effettuare il redirect degli output verso una funzione; sarà possibile utilizzare per esempio la funzione mb_output_handler() che converte l'encoding dei caratteri nel corrispondente output buffer. A questa direttiva si associa un valore stringa che corrisponde al nome della funzione che si intende passare come parametro.
- implicit_flush: accetta un valore booleano che può essere TRUE o FALSE; di default la voce è impostata su FALSE, quando viene abilitata ha un effetto simile all'esecuzione della funzione flush() permettendo a PHP di imporre all'output layer di riprodursi ad ogni chiamata dei blocchi HTML.
<?php
ob_start();
echo "Esempio di controllo dell'output";
setcookie("cookiename", "cookiedata");
ob_end_flush();
?>
In questo caso l'output prodotto da echo() verrà conservato nell'output buffer fino alla chiamata della funzione ob_end_flush(); nello stesso tempo setcookie() permetterà la creazione di un coockie senza generare errori, questo nonostante sia stato prodotto un output in precedenza. E' noto infatti che normalmente la generazione di headers dovrebbe avvenire prima della produzione di un qualunque altro output.
Vediamo un secondo esempio:
<?php // Attivo l'output buffering ob_start(); // Utilizzo echo per stampare una stringa (che viene memorizzata nel buffer) echo "Secondo esempio di controllo dell'output"; // Salvo il contenuto del buffer dentro una variabile e pulisco il buffer $res = ob_get_clean(); // Uso var_dump per stampare le informazioni relative alla variabile creata sopra var_dump($res); ?>L'output generato sarà il seguente:
string(40) "Secondo esempio di controllo dell'output"La funzione ob_get_clean() permette di recuperare tutto il contenuto del buffer e di cancellare il buffer output; Simile a questa è ob_get_contents() che ha la funzione di recuperare il contenuto del buffer senza però cancellarlo.







