X
Skimbu è stato abbandonato, ma è stato sostituito da due grandi progetti: visita ora Tasc.it e Abits.it!

Come creare una cache semplice e veloce di uno script PHP

Pubblicato da il giorno 11 agosto 2011

Raramente su Skimbu pubblichiamo articoli riguardanti linguaggi o comunque guide di programmazione, ma se lo facciamo è perché si tratta di script che vengono anche utilizzati qui su Skimbu. Lo script che andremo a vedere oggi è piuttosto semplice e ci servirà per eseguire la cache di script PHP. Vi faccio un esempio pratico. Fino a poco tempo fa su Skimbu articoli come quello delle 100 app per iPad erano parecchio lenti, in quanto per ciascun riquadro-recensione era necessario ricevere i dati dell’applicazione da Apple. Quindi ho dovuto trovare un metodo per eseguire una cache di ciascun riquadro che durasse molto tempo, anche un anno. In questo modo per un anno non dovrò più ricevere dati da Apple per quelle applicazioni, in quanto saranno memorizzati in dei file di testo. Lo script e altre spiegazioni dopo il salto…

Introduzione allo script

Prima di tutto, lo script che andremo a vedere e spiegare è molto semplice e basilare. Non è nulla di avanzato e non è utile a eseguire la cache di intere pagine. È perfetto però per eseguire la cache di script che hanno bisogno di una cache determinata e semplice. Ad esempio l’articolo che ho linkato prima delle 100 app per iPad possiede un doppio sistema di cache:

  • La prima è la cache dell’intera pagina che dura circa 2 ore ed è eseguita dal plugin W3 Total Cache per WordPress.
  • La seconda cache è quella di ciascun riquadro delle applicazioni, dura un anno ed è eseguita dal semplice script di questo articolo
È difficile analizzare tutti i casi per cui ti potrà servire questo script, ma sicuramente prima o poi in qualsiasi applicazione PHP ti tornerà utile, per velocizzare operazioni lente. Questo script è anche perfetto per eseguire la cache di una funzione PHP.

Così come tutte le guide PHP di internet, anche questa guida prende ispirazione da una guida inglese.

Lo script

A differenza di molte guide, io preferisco sempre prima mostrare lo script intero, commentarlo a dovere e aggiungere qualche spiegazione dopo, ecco dunque lo script intero.


// INIZIO CACHE

$cachefile = 'C:/themes/cache/xxx.txt'; //Qui andrà inserita la directory e il file di cache che sarà creato automaticamente, leggi il paragrafo dopo per ulteriori spiegazioni

$cachetime = 525600 * 60; // Durata della cache in secondi, in questo caso è un anno

// IF fondamentale, se il file di cache esiste già non viene creato, se non esiste verrà creato nello step successivo all'else

if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) {

include($cachefile);

} else {

ob_start(); // start the output buffer

//Qui va lo script che scriverà attraverso un echo o un return nel file TXT, leggi il paragrafo dopo per ulteriori spiegazioni

$fp = fopen($cachefile, 'w') or die("C'è stato un errore nel caricare il file"); // Apre il file di cache per scrivere

fwrite($fp, $return); //Il file viene salvato

fclose($fp); //Il file TXT viene chiuso

ob_end_flush(); // L'output viene inviato al browser e lo script da ora in avanti verrà caricato con la cache

}

Spiegazione e personalizzazione dello script

La variabile $cachefile dev’essere non solo la directory dove verrà posto il file, ma anche il nome del file. Può essere una variabile “statica”, ad esempio mettendo:

$cachefile =  'C:/blog/themes/cache/file_di_cache.txt';

Oppure può essere dinamica, se ad esempio vuoi mettere il file nel tuo tema di WordPress, allora dovrai mettere:

$templatedirectory = get_template_directory();

$cachefile =  $templatedirectory . '/cache/file_di_cache.txt';

Assicurati prima che esista la cartella cache nel tema. Poi volendo puoi rendere dinamico anche il nome del file, aggiungendo una variabile al posto di “file_di_cache”, ma per quello dipende da caso a caso. Ad esempio su Skimbu per l’articolo sulle 100 app per iPad abbiamo utilizzato l’ID dell’applicazione di ciascun riquadro per il nome del file TXT.

La variabile $cachetime è la durata in secondi della cache, scaduto tale tempo la cache sarà ricostruita. Ad esempio 120 * 60 significa due ore. Se vuoi farla durare un anno dovrai mettere 525600 * 60.

Mi vorrei soffermare infine sulla parte più importante dello script, cioè lo script di cui vuoi eseguire la cache. Infatti dopo la stringa ob_start(); dovrai inserire lo script PHP che ritornerà o stamperà quel testo che andrà a finire nel file TXT di cache. Dopo ob_start(); ci puoi mettere qualunque cosa, l’importante è che se metti una funzione ci sia un ritorno e quindi la funzione dovrà contenere un echo o un return che sarà poi scritto nel file TXT. Se ad esempio dopo ob_start(); ci metto:


$somma = 5 + 6;

echo $somma;

Nel file TXT apparirà semplicemente “11″.  Se non avessi messo l’echo, allora avrei creato un file TXT vuoto. Anche in questo caso comunque dipende molto dallo script di cui dovete eseguire la cache. Noi abbiamo eseguito la cache di una funzione che produce l’HTML del riquadro di un’applicazione per iOs, tale HTML viene poi scritto nel file TXT.

Conclusioni

Sicuramente per utilizzare al meglio questo script dovrai conoscere abbastanza bene PHP. Questa soluzione di cache è una soluzione che può essere applicata a tantissimi tipi di script, necessita solo un minimo di ragionamento quando occorre inserire lo script che stamperà qualcosa nel file TXT. L’importante è capire il funzionamento della cache, dopodiché sarà semplice applicarla alle proprie necessità.

, 883 articoli pubblicati

Fin da quando ho 7 anni sviluppo siti web, amo l'informatica, la fotografia, la scienza e l'economia. Credo che il segreto del successo stia nel fare cose che altri non fanno. Nel 2008 ho fondato Skimbu, a cui ho voluto fin da subito dare una precisa immagine attraverso una grafica semplice, bella e unica e attraverso articoli di qualità e anch'essi unici. Continuerò Skimbu fino a che avrò voglia, con la passione e la voglia di far apprendere alla gente che esiste qualcosa di più meraviglioso che la televisione o che le solite dichiarazioni dei politici.

Visita il sito web di questo autore

Condividi l'articolo!

  • Domy

    Ho un problema.
    La prima volta che visualizzo lo script, mi visualizza tutto bene, la seconda volta (dopo il refresh della pagina) viene richiamata la cache, e vedo tutto bianco.
    Il file viene creato, ma se lo apro scopro che è vuoto.
    Cos’è?

    • http://www.skimbu.it Alberto Ziveri

      Semplicemente non scrive nulla nel file. Controlla che avviene un echo o qualcosa che scriva sul file.

      • Domy

        Semplicemente ho creato un file chiamato “index.php” (in una cartella di test).
        E ho messo dentro questo:
        // INIZIO CACHE $cachefile = 'C:/themes/cache/xxx.txt'; //Qui
        andrà inserita la directory e il file di cache che sarà creato
        automaticamente, leggi il paragrafo dopo per ulteriori spiegazioni $cachetime = 525600 * 60; // Durata della cache in secondi, in questo caso è un anno // IF fondamentale, se il file di cache esiste già non viene creato, se non esiste verrà creato nello step successivo all'else if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) { include($cachefile); } else { ob_start(); // start the output buffer //Qui va lo script che scriverà attraverso un echo o un return nel file TXT, leggi il paragrafo dopo per ulteriori spiegazioni
        $somma = 5 + 6; echo $somma;
         $fp = fopen($cachefile, 'w') or die("C'è stato un errore nel caricare il file"); // Apre il file di cache per scrivere fwrite($fp, $return); //Il file viene salvato fclose($fp); //Il file TXT viene chiuso ob_end_flush(); // L'output viene inviato al browser e lo script da ora in avanti verrà caricato con la cache }

        Purtroppo il file continua a restare vuoto (nonostante venga creato correttamente).
        Ah, tutto il codice scritto sopra è tutto posizionato all’interno dei tag

      • Domy

        Scusa, errore di battitura:

      • Domy

        Ho dovuto mettere lo spazio sennò non mi appariva

      • http://www.skimbu.it Alberto Ziveri

        Strano che non funzioni. Prova a eliminare i commenti fatti nell’articolo, a eliminare il file e prova a vedere se ora lo crea bene e lo riempie.
        È strano comunque ci deve essere qualche errore banale.

      • Manuel

        C’è un errore nel tuo script ed anche nello script dell’articolo:
        Non è vero che tutto quello che viene stampato dopo ob_start() viene inserito nel file, in realtà ciò che scrive nel file è la riga fwrite ($fp, $return), e scrive proprio il valore della variabile $return.
        Se tu provi a sostituire fwrite ($fp, $return) con fwrite ($fp, $somma) vedrai che ti scrive la somma nel file.
        La stringa “echo $somma;” serve solo per stampare a video ciò che dovrebbe vedersi se il file .txt non è ancora stato creato

      • http://www.skimbu.it Alberto Ziveri

        Mi sa che hai ragione. Abbiamo unito il nostro script personalizzato e quello del blog a cui ci siamo ispirati e forse c’è stato un errore. Appena riesco controllo la versione funzionante che usiamo su Skimbu e poi correggo l’errore ;)