Simple cache para Php

Hoy os voy a dejar con algo bastante útil, una cache para PHP.

Con este código que os dejo aquí os será muy fácil almacenar valores en un fichero. Muy útil para guardar menus por ejemplo que se generan siempre, y de este modo no tener que consultar la bbdd cada vez que se abre la web.

Es muy sencillo de usar ya que para grabar los datos se usa como si fuera una variable normal de PHP (como una sesión) viene a ser el objeto application de ASP para PHP.

El código lo he cogido de leosingleton y le he hecho unas mejoras, como tiempo que expira la cache, si no existe el fichero lo crea, y activar desactivar la cache.

Código cache.php:

define("CACHE_ACTIVE",true);//false disabled, true enabled the cache
	define("CACHE_DATA_FILE",$_SERVER["DOCUMENT_ROOT"]."/cache/application.data");//where we keep the cache
	define("CACHE_EXPIRE",4320);//seconds when the cache expire now 12 hours
	//define("CACHE_EXPIRE",10);//seconds when the cache expire now 10seconds

function cache_start ()//load variables from the file
{
	if (CACHE_ACTIVE){
	    global $_CACHE;

	    // if data file exists, load application variables
	    if (file_exists(CACHE_DATA_FILE))
	    {
	        // read data file
	        $file = fopen(CACHE_DATA_FILE, "r");
	        if ($file)
	        {
	            $data = fread($file,
	                filesize(CACHE_DATA_FILE));
	            fclose($file);
	        }
	        // build application variables from data file
	        $_CACHE = unserialize($data);
	    }
	    else  fopen(CACHE_DATA_FILE, "w");//if the file does not exist we create it

	  	//erase the cache every X minutes before loading next time
	    $app_time=$_CACHE["EXPIRE"]+CACHE_EXPIRE;
	    if (time()>$app_time){//expired
	    	//echo "expired ".$app_time . " current time:" . time();
	    	unlink (CACHE_DATA_FILE);//erase the cache
	    }

	}
}

function cache_write()//writes into the cache file
{
	if (CACHE_ACTIVE){
	    global $_CACHE;
		$_APP["EXPIRE"]=time();//save time
	    // write application data to file
	    $data = serialize($_CACHE);
	    $file = fopen(CACHE_DATA_FILE, "w");
	    if ($file)
	    {
	        fwrite($file, $data);
	        fclose($file);
	    }
	}
}

?>

Uso:

cache_start(); //puedes ponerlo después del include de cache.php y así lo cargas siempre

$_CACHE["nombre_de_la_variable_lo_que_quieras"]="lo que sea";
cache_write();

Consejos:

  • Si vas a usar la variable $_CACHE dentro de una función recuerda hacerla global para la función.
  • Sólo llama a la función cache_write cuando hayas cambiado el contenido.
  • No almacenes grandes cantidades de datos, sino irá también lento
  • Cambia el tiempo de expiración a tu gusto
  • Ojo no guardes cosas importantes en el fichero de texto
  • Es bueno si el fichero .data, sólo puede ser escrito y leído  por el apache

Espero os sea útil, este código lo encontraréis en Open Classifieds

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s