Actualmente estas viendo el weblog personal de Carlos Montalvo, un profesional en el desarrollo web con sede en la ciudad de Lima, Perú.

Suscribete a posts o comentarios

Sigueme en Twitter

Sistema de Caché Simple en PHP

31 Jan

Escrito por hace 1 año y 7 meses | 2 Comentarios

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.

sistema_cache

Si tienen alguna duda sobre la clase pregunten, cabe resaltar como dije al principio que esta clase es muy simple pero flexible.

Descarga


Categorizado :Desarrollo Web

Etiquetado :Cache,php

2 Comentario(s) para "Sistema de Caché Simple en PHP"

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

nuevaq

June 16th, 2009 hace 1 año y 2 meses

Realmente un sencillo script que nos permitira optimizar al maximo nuestro sistema

Gracias lo probare ahora .