Inicio > Programación Web > PHP Cache Control Inteligente

PHP Cache Control Inteligente

sábado, 12 de octubre de 2024 Dejar un comentario Ir a comentarios

Este fragmento de código comprueba si una página ha sido modificada desde que fue exhibida por última vez. Si es así, envía un encabezado «304 Not Modified» y sale, de lo contrario el contenido se renderiza. Anteponer este fragmento de código en la parte superior de cada archivo PHP al que desea aplicar este mecanismo de almacenamiento en caché inteligente. Especialmente útil si (tienes que) servir contenido estático a través de php y quieres que sea cacheado como HTML ordinario o CSS.

<?php
//Consigue la ultima fecha de modificacion de este archivo
$lastModified=filemtime(__FILE__);
//Consigue el Hash unico de este archivo (etag)
$etagFile = md5_file(__FILE__);
//Consigue la cabecera HTTP_IF_MODIFIED_SINCE si la tiene
$ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
//Consigue la cabecera HTTP_IF_NONE_MATCH si la tiene (etag: hash unico del archivo)
$etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);

//Pone la cabecera last-modified (ultima modificacion)
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
//Pone la cabecera etag-header
header("Etag: $etagFile");
//Se asegura de habilitar la cache
header('Cache-Control: public');

//Verifica si la pagina ha cambiado. Si no, envia 304 y sale
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])==$lastModified || $etagHeader == $etagFile)
{
       header("HTTP/1.1 304 Not Modified");
       exit;
}

//tu codigo
echo "Esta pagina fue modificada: ".date("d.m.Y H:i:s",time());

?>

Comparte y diviertete:
  • Print
  • Digg
  • StumbleUpon
  • del.icio.us
  • Facebook
  • Yahoo! Buzz
  • Twitter
  • Google Bookmarks
  • BarraPunto
  • Bitacoras.com
  • BlinkList
  • Blogosphere
  • Live
  • Meneame
  • MSN Reporter
  • MySpace
  • RSS
  • Suggest to Techmeme via Twitter
  • Technorati
  • LinkedIn
  • email
  • FriendFeed
  • PDF
  • Reddit
  • Wikio IT
  • Add to favorites
  • blogmarks
Top Footer