Main Menu




browser lang:en

Users Area

Client Login

today cache size is:0

 

 


Commenti

RE:trasformare in .gz by boris
10/03/2011 by marco

22/02/2011 by bono
RE:trasformare in .gz
22/02/2011 by boris
trasformare in .gz
21/02/2011 by bono
RE:Ma a che serve sta roba???
05/02/2011 by dwarf79
Ma a che serve sta roba???
28/01/2011 by Luca
Rapidshare hotfile fileserver download
08/01/2011 by Rapidshare hotfile fileserver download
re:xml
03/12/2010 by david68

Leggi tutto »


RAPIDQ

Rapid-Q:The lost files
My old library where i have collected all the rapidq scripts and italian help


Today my pagerank is: Free Page Rank Tool
Upbooking - free booking engine

Costruendo Holyguard.net:Un motore di cache

Sia per l'incremento di visite o per lúso di script sempre piú complessi, la esecuzione di consulte costanti al database MySQL puó provocare rallentamenti o addirittura un crash del server.

Una delle migliori alternative per la soluzione a questo problema è implementare un sistema di Cache con PHP. Con questo, invece di realizzare tutte le consulte al Database per generare una pagina, semplicemente si genererá un archivio html. Il risoltato è un enorme risparmio di risorse e una risposta molto piú rapida da parte del server.

In questo mini tutorial vedremo la creazione di una semplicissima classe PHP, peró sufficientemente flessibile per essere adattata ai nostri progetti e personalizzata secondo le nostre necessitá.

Le funzioni basiche

Peró prima di andare alla parte pratica e vedere il codice sorgente, diamo uno sguardo alle tre funzioni chiave che utilizzeremo nello script:

fileatime(): Con questa funzione otterremo il momento esatto (ora del server) in cui il file di cache `stato creato. Questo dato, ci servirá per verificare se la cache è scaduta(expired).

ob_start(): Questa funzione è la principale, e irrimpiazzabile, di tutte. Con essa indichiamo a PHP che immagazzini in un buffer interno tutta la informazione di uscita che incontra. Cioé, non si mostrerá niente nel browser, tutto il testo (html) finirá immagazzinato nel buffer.

ob_get_clean(): Questa funzione implementa ob_start() e permette di ridurre alcune linee di codice. In generale, per creare una cache si usano solitamente ob_get_contents() per recuperare e mostrare la informazione salvata nel buffer interno e, di seguito, ob_end_clean() per pulire il buffer. Bene, con ob_get_clean() otteniamo lo stesso risultato che utilizzando le due anteriori.

Conoscendo le funzioni chiave per creare il nostro script, ora vedremo il suo processo di creazione.

Gli attributi necessari

La nostra classe abbisogna di cinque attributi (variabili chiave). Ognuno di loro conterrá informazioni chiave per far funzionare la nostra classe correttamente.

$cache_dir, per indicare il path dove si immagazzina la cache
$cache_time, per indicare il tempo di durata della cache (in secondi)
$caching, se è true specifica che si salvi la cache. False per difetto.
$cleaning, se è true specifica che si pulisca la cache, per attualizzarla successivamente. False per difetto.
$file, per indicare il path dello script da cacheare

Conoscendo le funzioni básiche e gli attributi necessari, procedimao alla creazione della nostra classe.

La Classe PHP: Cache

La Nostra classe avrá solamente due metodi, con il primo indicheremo che si inizi la esecuzione della cache e con il secondo, che si finalizzi. I métodi sono:

function start_cache(): Questo metodo richiede 2 parámetri obbligatori e 1 opzionale. I due parámetri obbligatori sono:

$path, che trasmette il path della cache a $cache_dir; e
$time, que trasmette il tempo massimo di durata della cache a $cache_time.

Il parametro opzionale ($action), è molto utile per siti che si attualizzano costantemente. Per esempio, una pagina che mostra notizie, deve attualizzarsi ogni volta che si invia una notizia nuova, o la pagina di un articolo deve attualizzarsi ogni volta che si invia un commento nuovo. Voglio dire, ogni volta che si esegue una determinata azione, deve attualizzarsi la cache. Per ottenere questo possiamo utilizzare il seguente parametro:

$action, che trasmette se la cache deve attualizzarsi a $cleaning. Se si è eseguita una determinata azione, $action è true. Per difetto è false.

Una volta recuperati i parametri, il metodo start_cache() verificherá se si compie una condizione. Se la risposta é si, si legge la cache. Peró,se la risposta è no, immagazziniamo la informazione nel buffer e torniamo al parametro $caching come true (false per difetto).

Per ridurre far si che la classe sia ridotta di volume, e farla piú semplice, per la scrittura della cache utilizzeremo la funzione readfile(), al posto delle piú conosciute fopen(), fread() e fclose(), anche se, utilizzare queste funzioni, renderebbe la cosa piú flessibile (Nel codice appaiono commentate).

Il secondo metodo che utilizzeremo è:

function close_cache(): Questo metodo verifica se $caching é true. Se la risposta è affermativa, recupera la informazione salvata nel buffer, la mostra, e scrive (crea o attualizza) il file di cache.


  
/*
* Clase PHP - Cache
* www.baluart.net
*/

class cache 
{
var $cache_dir; // path dove si immagazzina la cache
var $cache_time; // tempo di expire della cache (in secondi)
var $caching = false; //true, per cacheare
var $cleaning = false; //true, per pulire e attualizzare
var $file = ''; // path dello script che si va cacheare

function start_cache($path='',$time,$action=NULL){

global $_SERVER;

$this->cache_dir = $path;
$this->cache_time = $time;
$this->cleaning = $action;
$this->file = $this->cache_dir."cache_".md5(urlencode($_SERVER['REQUEST_URI'])); //md5, criptato per sicurezza

//condizionale: Esistenza dell archivio, data di expire, azione
if (file_exists($this->file) && (fileatime($this->file)+$this->cache_time)>time() && $this->cleaning == false){

readfile($this->file);
/*
// apriamo il file
$handle = fopen( $this->file , "r");
do {
//leggiamo fino a 8192 bytes per difetto (possiamo incrementarlo)
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
//mostriamo la cache
echo $data;
} while (true);
fclose($handle);
*/
exit();
} else {
$this->caching = true;
//grabamos buffer
ob_start();
}
}

function close_cache(){
if ($this->caching){
//Recuperiamo informaczione del buffer
$data = ob_get_clean();
// mostriamo informazione
echo $data;
//cancelliamo cache se esiste
if(file_exists($this->file)){
unlink($this->file);
}
//scriviamo informazione in cache
$fp = fopen( $this->file , 'w' );
fwrite ( $fp , $data );
fclose ( $fp );
}
}

} // Fine classe Cache


Cache con PHP: Messa in moto

Finalmente possiamo utilizzare il nostro script er cacheare qualsiasi pagina PHP. A mó di esempio, andiamo cacheare solo un pezzo di codice PHP e un'altro pezzo no, per osservare il suo funzionamento.


//Creiamo la istanza
$cache1 = new cache();
//Senza cache
echo "Sin cache: ". date("D M j G:i:s T Y") . "
"; //Con cache per sessanta secondi. $cache1->start_cache('tmp/',60,false); echo "Con cache: ". date("D M j G:i:s T Y"); $cache1->close_cache(); //Chiudiamo la cache

Tuttavia dobbiamo fare attenzione a che la cache immagazzini tutto il codice html cheandiamo a mostrare nella pagina. In caso contrario, quando si utilizza la cache, il testo posteriore alla cache non sará mostrato. Questo è dovuto al fatto che utilizziamo la funzione exit() per terminare la esecuzione dello script.

Conclusioni e esempio finale

Finalmente, possiamo vedere un esempio del funzionamento


include('clases/cache.class.php');

Dove cache.class.phpè il nome del file che contiene la classe.

Bene, per ora è tutto, spero che questo minitutorial vi sia di aiuto.


Commenti

Inserisci un commento

Titolo
Messaggio
Nome Utente
e-mail (se vuoi ricevere le risposte a questo post anche via mail)

Users

Videos


Scripts & Tutorials

Linux - I comandi principali

07/11/2010 

Per i piú smemorati, una lista di comandi principali usati con linux cd : cambia la directory corrente. ls : mostra il…

in:Scripts e tutorials (0 commenti)

Search Engine Optimization - 130 parametri usati da google per valutare il tuo sito

26/08/2010 

Con l'avvento di caffeine molti webmaster si sono trovati a dover rivedere tutte le strategie SEO per i…

in:Scripts e tutorials (0 commenti)

Inserisci Google BUZZ nel tuo sito con Google Buzz Widget Jquery Plugin

15/02/2010 

Questo è un widget di jQuery per il nuovo social network di Google-Buzz-che è possibile incorporare ovunque per…

in:Scripts e tutorials (0 commenti)

Javascript - Codifica/decodifica di password nei file ste di Dreamweaver

17/01/2010 

Questo é un pratico codificatore/decodificatore/decriptatore (chiamatelo come volete) di password inserite nei file di configurazione .ste su dreamweaver function…

in:Scripts e tutorials (0 commenti)

PHP - Uno script per calcolare il PageRank di Google

10/01/2010 

Il PageRank è un algoritmo che usa Google per valutare la credibilità e l'autorevolezza delle pagine Web. Il…

in:Scripts e tutorials (8 commenti)

PHP - Download file con limite di velocita'

20/10/2009 

Con questo script possiamo limitare il download di un file dal nostro server php; il limite di velocitá…

in:Scripts e tutorials (0 commenti)

PHP - Salvare immagini remote sul proprio server usando CURL

12/10/2009 

Alcuni host hanno disabilitati nei settaggi del.ini i comandi allow_url_fopen. Questo significa anche non poter usare i vantaggi…

in:Scripts e tutorials (2 commenti)

PHP - Short Url: due funzioni per creare link brevi

06/10/2009 

Gli SHORT URLS fanno ormai parte di quelle cose di internet che ci suonono terribilmente familiari; per capirci…

in:Scripts e tutorials (0 commenti)

Leggi tutto »


Tag Clouds


Linux comandi principaliSearch Engine Optimization parametri usati google valutare sitoInserisci Google BUZZ sito Google Buzz Widget Jquery PluginJavascript Codificadecodifica password file DreamweaverPHP script calcolare PageRank GooglePHP Download file limite velocitaPHP


Add to Technorati Favorites