Uno de las mejores alternativas para que tus proyectos en php se muestren más rápido es la de implementar un sistema de cache, con lo que ganamos velocidad y él un consumo reducido de nuestro servidor.
Hoy veremos un Sistema de Cache Simple en PHP, pero lo suficientemente flexible como para poder adaptarla a cualquier proyectos y personalizarla conforme a nuestras necesidades.
La Clase de Cache en PHP
/* file : cache.class.php
* Clase : m2Cache
* Original: http://www.calinsoft.com/2009/01/sistema-de-cache-simple-en-php.html
*/
//Algunos parámetros de configuración
define('ABSPATH', dirname(__FILE__) );
//Directorio donde almacenaremos los archivos cacheados
define('CACHE_DIR',
ABSPATH . '/cache'); // tiene que tener permisos 777
//El tiempo que la copia se mantendrá vigente.
define('CACHE_TIME', 3600 ); // 3600 segundos 1 hora.
// La dirección de la Pagina Donde nos encontramos
define('PAGE',
'http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
);
// La dirección de la pagina con el nombre encriptado
define('CACHE_LINK',
CACHE_DIR . "/" . md5( PAGE ) . ".html"
);
class m2Cache
{
//Variable para activar el Sistema de Cache
var $enableCache;
//Variable para almacenar el tiempo de la creación del archivo
var $time;
function m2Cache(){
//por defecto el sistema de cache estará desactivado
$this->enableCache = false;
//el tiempo por defecto empieza en 0
$this->time = 0;
}
//Función para activar el Sistema de cache.
function enable(){
$this->enableCache = true;
}
// Retorna el estado Actual del Sistema.
function status(){
return $this->enableCache;
}
// Función Inicio del Cache.
function startCache()
{
// verificamos estado
if ($this->status()):
//verificamos que existe la pagina en cache
if ( @file_exists( CACHE_LINK ) ):
// si existe obtenemos la hora de creación del archivo.
$this->time = @filemtime( CACHE_LINK );
// verificamos si está adentro del tiempo permitido.
if ( ( time() - CACHE_TIME ) < $this->time ):
// si está adentro del tiempo
// mostramos la pagina cacheada.
@readfile( CACHE_LINK );
die();
else:
//Si Expiro se elimina, para prevenir conflictos.
@unlink( CACHE_LINK );
endif;
endif;
//Habilitamos el uso de búferes de salida
ob_start();
else:
// no está el activado sistema de cache
return false;
endif;
}
//función de término del sistema de cache
function endCache()
{
//verificamos estado del sistema de cache
if ($this->status()):
//Creamos el archivo
$fp = fopen( CACHE_LINK , 'w' );
// escribimos adentro de el.
@fwrite( $fp , ob_get_contents() );
//cerramos
@fclose( $fp );
//Volcamos el búfer de salida y deshabilitamos el uso del búfer
ob_end_flush();
else:
// no está el activado sistema de cache
return false;
endif;
}
}
Método de Uso
/* file: index.php Para usarlo solo incluimos la clase dentro de la pagina que deseemos cachear. */ include 'cache.class.php'; // Instanciamos $cache = new m2Cache(); // Activamos el cache $cache->enable(); //al comienzo de la pagina añadimos esto $cache->startCache(); /* acá vendría la pagina en si comenzando supuestamente por <html> <head> <body> ....................... ....................... ....................... Y luego </body> </html> */ //al final añadimos $cache->endCache();
Conclusión y Descarga de archivos
Con el parámetro CACHE_DIR indicamos el directorio donde almacenaremos la cache , con CACHE_TIME indicamos el tiempo de vida de la cache (en este caso 60 minutos/1 hora) y la función $cache->enable(); de la clase la cual nos permite activar el sistema de cache por defecto esta desactivado (muy bueno cuando uno va hacer cambios en la pagina).
He realizado una mini página sencilla adaptándola al sistema de cache para que observen su funcionamiento correcto, en la cual la estructura de archivos es la siguiente.
Si tienen alguna duda sobre la clase pregunten, cabe resaltar como dije al principio que esta clase es muy simple pero flexible.
juanolo2001
June 5th, 2009 hace 1 año y 2 meses
Tiene muy buena pinta tu codigo para el cache.
Te queria preguntar una cosa...
Todos estos sistemas de cache... No son recomendados para paginas en las que manejan variables de tipo POST o GET ¿verdad?
He oido que si se pasan nuevos valores con estas variables y la pagina esta en cache, tomara la pagina de cache con los valores de esta y no los nuevos valores introducidos no?
Un saludo