Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/02/2007, 16:17
chiquitinto
 
Fecha de Ingreso: febrero-2007
Mensajes: 46
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Cómo cachear páginas e imágenes

La función que utilizo es esta. Si devuelve true, el fichero no lo genero.

function isCached($rFechaModificacion = null) {
$if_modified_since = preg_replace('/;.*$/', '', $HTTP_IF_MODIFIED_SINCE);

// obtengo la fecha de modificación
if ($rFechaModificacion) {
$mtime = strtotime($rFechaModificacion);
} else {
$fec = &New Fecha();
$mtime = strtotime($fec->now());
}
$gmdate_mod = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';

$if_modified_since; " . $HTTP_IF_MODIFIED_SINCE);

// si el navegador tiene una cacheada...
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$ims = preg_replace('/;.*$/', '', $HTTP_IF_MODIFIED_SINCE);
$ims_unix = strtotime($ims);
// comparo la fecha de la suya con la de la mia
if ($ims_unix == $mtime) {
// y si coinciden le digo que nada, que use la suya
header("HTTP/1.0 304 Not Modified");
return true;
}
} // si no tiene la imágen cacheada le digo la fecha de la mia

header("Last-Modified: $gmdate_mod");
return false;
} // De isCached

También he probado una página de prueba directamente y en cuanto uso el comando session_start() me deja de funcionar el cacheo de la página:

<?php // -*- sgml-parent-document: ("dummy.html" "html" "body" ()) -*-
session_start();

$if_modified_since = preg_replace('/;.*$/', '', $HTTP_IF_MODIFIED_SINCE);

$mtime = filemtime($SCRIPT_FILENAME);
$gmdate_mod = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';

if ($if_modified_since == $gmdate_mod) {
header("HTTP/1.0 304 Not Modified");
exit;
}
header("Last-Modified: $gmdate_mod");

if (isset($touch)) touch($SCRIPT_FILENAME);
$gmdate_now = gmdate('D, d M Y H:i:s') . ' GMT';
$now = time();

print "
<table>
<tr><td>if_modified_since</td><td>$if_modified_since</td></tr>
<tr><td>gmdate_mod</td><td>$gmdate_mod</td></tr>
<tr><td>gmdate_now</td><td>$gmdate_now</td></tr>
</table>
<p>
<a href=\"$SCRIPT_NAME\">Link to self</a>.<br>
<a href=\"$SCRIPT_NAME?touch=y&time=$now\">Update source file</a>.<br>
<a href=\"$SCRIPT_NAME?time=$now\">Link to self with varying URL</a>.
";

?>

Última edición por chiquitinto; 19/02/2007 a las 01:29