Blog de Gonzalo

Cache sencillo con php

Hace unos meses escribí un post sobre usar caché, para cachear contenidos, en php, más concretamente lo escribí sobre memcached, aunque hay varios disponibles.
Hoy os voy a hablar de como crear un cache sencillo con php. Que uso en mi blog para guardar el menú de categorías y no tener que llamar a MySQL, para generar dicho menú, cada ve que el usuario selecciona una opción del menú o un artículo. Para ello hay que usar el sistema de buffer que nos ofrece php.
Os pongo un ejemplo sencillo:

ob_start();
.... //codigo html de la página a cachear
$contenido = ob_get_contents(); //contenido del html a cachear (línea anterior)
$cached = fopen('pagina_cacheada.html', 'w');
fwrite($cached, $contenido); //Se guarda el contenido html en el fichero
fclose($cached);
ob_end_clean();
ob_end_flush();

Una vez ejecutado el script ya se tiene el html de la página en un fichero y no hace falta generar esa página con sus llamadas a la base de datos. EL código se puede complicar más haciendo que la caché dure un determinado tiempo y que si el fihcero cacheado no existe se cachee y se muestre. Y también se puede hacer que desde un backoffice si se cambia el contenido se llame a un script que genere el fichero a cachear, ya sea un menú, un artículo o lo que sea.
Os voy a explicar las funciones básicas del buffer de php.
  • ob_start: Se inicia el buffer.
  • ob_flush: Permite limpiar el buffer imprimiendo toda la salida.
  • ob_get_contents: Permite obtener los contenidos del buffer sin imprimir en pantalla.
  • ob_end_clean: Permite desechar todo el buffer, sin imprimir en pantalla.
  • ob_end_flush: Envia el buffer de salida y deshabilita el almacenamiento en el mismo.