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.