Para optimizar un poco mas las cosas cree una clase llamada HttpCache que se encarga de aprovechar el cache del explorador de cada usuario, basicamente lo que hace es responder con la cabecera 304 not changed si el usuario tiene una copia en su computadora.
No se por que pero no funciona como debiera, nunca devuelve la cabecera 304
Por favor echenle un vistazo al codigo, al final les adjunto la forma de usarla;
Código PHP:
class HttpCache {
private $lastModified;
private $etag;
public function setEtag($tag) {
if (!isset($this->lastModified)) {
$this->etag=substr(md5($tag),0,15);
} else {
$tag=$tag.gmdate('DdMYHis', $this->lastModified);
$this->etag=substr(md5($tag),0,15);
}
}
public function setLastModifiedFromFile($file) {
if (file_exists($file)) {
$this->lastModified = filemtime($file);
} else {
$this->lastModified=now();
}
}
public function sendHeaders() {
header('Cache-Control: private, must-revalidate');
header('Expires: ' . gmdate("D, d M Y H:i:s", time() + 60*60*48) . ' GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $this->lastModified).' GMT');
header('ETag: '.$this->etag);
$headers = getallheaders();
if(($headers['If-None-Match'] == $this->etag )|| ($headers['If-Modified-Since'] == gmdate('D, d M Y H:i:s', $this->lastModified)) ){
header('HTTP/1.0 304 Not Modified');
exit;
}
}
}
Código PHP:
//incluyo el archico que tiene la clase HttpCache
require('Core/Control/HttpCache.php');
$cache= new HttpCache();
$cache->setLastModifiedFromFile('prueba.php');
$cache->setEtag('hola');
$cache->sendHeaders();
echo '<pre>';
print_r($cache);
echo '</pre>';
Saludos, Eugenio