Utilizzare la cache con php
Posted on 07. Aug, 2007 by Administrator in php, tutorials
Il meccanismo di cache in php è molto semplice da usare. Abbiamo bisogno di usare due files per settare un sistema di cache per il nostro sito.
Il primo "begin_caching.php" in questo caso ,funzionerà prima di tutti gli altri file php del sito. Il secondo "end_caching.php" in questo caso gira dopo i normali script.
Questi file vengono usati aggiungendo le seguenti linee di codice al tuo file .htaccess.
php_value auto_prepend_file /full/path/to/begin_caching.php
php_value auto_append_file /full/path/to/end_caching.php
Fatto ciò spostiamo negli scripts che devono lavorare. I passi principali per utilizzare la cache del sistema sono:
- Ricevere una richiesta per la pagina
- Verificare l'esistenza di una versione cache della pagina
- Verificare che la pagina in cache sia valida
- Se lo è invia la copia in cache
- Altrimenti crea una nuova copia cache e inviala
Per iniziare con gli scripts dobbiamo settare diversi parametri. Devi settare la directory dove salvare i files della cache e dargli i permessi di scrittura chmod 777
<?php
// Settings
$cachedir = '../cache/'; // Directory dei files di cache
$cachetime = 600; // Secondi per i files di cache
$cacheext = 'cache'; // Estensione dei file della cache( di solito cache, htm, txt)
// lista da ignorare
$ignore_list = array(
'ilovejackdaniels.com/rss.php',
'ilovejackdaniels.com/search/'
);
// Script
$page = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // Requested page
$cachefile = $cachedir . md5($page) . '.' . $cacheext; // Cache file da caricare o creare
$ignore_page = false;
for ($i = 0; $i < count($ignore_list); $i++) {
$ignore_page = (strpos($page, $ignore_list[$i]) !== false) ? true : $ignore_page;
}
$cachefile_created = ((@file_exists($cachefile)) and ($ignore_page === false)) ? @filemtime($cachefile) : 0;
@clearstatcache();
// Mostra file da cache se valido
if (time() - $cachetime < $cachefile_created) {
//ob_start('ob_gzhandler');
@readfile($cachefile);
//ob_end_flush();
exit();
}
// Se tutto è andato bene, generiamo il file di cache
ob_start();
?>
Il file inizia generando un MD5 hash della pagina richiesta. Se il file esiste occore uploadarlo se vecchio altrimenti mostrarlo.
Andiamo al secondo file, "end_caching.php". Alla fine del primo file, se non esiste cache,iniziamo il buffering di output .Questo significa che possiamo inviare la pagina all'utente stiamo salvando questo per usi future. Nel secondo script sotto prendiamo il contenuto del buffer di output ,e lo scriviamo nel file.
<?php
// Now the script has run, generate a new cache file
$fp = @fopen($cachefile, 'w');
// save the contents of output buffer to the file
@fwrite($fp, ob_get_contents());
@fclose($fp);
ob_end_flush();
?>
$cachedir = '../cache/'; // Directory to cache files in (keep outside web root)
$cacheext = 'cache'; // Extension to give cached files (usually cache, htm, txt)
$page = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // Requested page
$cachefile = $cachedir . md5($page) . '.' . $cacheext; // Cache file to either load or create
Continua a leggere su: http://www.ilovejackdaniels.com/php/caching-output-in-php/




Leave a reply