Una caché en PHP a prueba de bombas

No es extraño que una web que habitualmente tiene poco tráfico, por un azar del destino reciba un aluvión de visitantes que la tumbe.

Da igual si es por una portada en Menéame, Digg, Reddit, TechCrunch o porque te han mencionado en el discurso de navidad del rey, el caso es que para una vez que tu web recibe tráfico, no tienes forma de aprovecharlo.

En el tiempo en que cambias de servidor, estas pocas líneas de código pueden ayudarte a capear el temporal y si tienes una web a medida en PHP es una buena idea meterle esto en portada antes de plantearte un sistema de caché más complicado.

La carpeta en la que vaya a ir la caché necesita permisos de escritura.

// principio del fichero a cachear
$cache_file = './cache.html'; // ruta relativa a la caché
$cache_life = 10; // duración de la caché, en segundos
$filemtime = @filemtime($cache_file);
if ($filemtime && (time() - $filemtime < $cache_life)){
	readfile($cache_file);
	exit();
}else{
	ob_start();
}
  1. Esta parte parte debe ir al comienzo del documento, antes de escribir nada al navegador.
  2. Define la ruta de fichero de la caché (ruta relativa)
  3. Establece la duración de la caché, con unos minutos es suficiente para que se note
  4. Comprueba la edad de la caché, si el fichero no existe devuelve false
  5. Compruebo si hay una caché válida
  6. si la hay, la lee con readfile y
  7. termina la ejecución del fichero
  8.  
  9. Si no encuentra una caché válida, inicia el output buffer
// final del fichero a cachear
file_put_contents($cache_file,ob_get_flush(),LOCK_EX);
  1. Esta parte va al final del fichero que se quiere cachear
  2. Guarda el contenido del output buffer al fichero de la caché, pidiendo bloqueo de uso exclusivo para que no haya problema con las colisiones.