Je cherche à mettre en place une gestion de cache intelligente fonctionnant sur le principe suivant :
1) Toute requète de page html est redirigée vers page.php
1.1) si la page demandée fait partie de l'ensemble des pages "articles" (les pages qui sont mises en cache) :
1.1.1) si elle existe en cache, je compare sa date de dernière modification à l'en-tête "if-modified-since"
1.1.1.1) si les dates correspondent, je veux renvoyer un code "304 not modified", sans renvoyer la page
1.1.1.2) sinon, je dois renvoyer la page en spécifiant son header "last-modified" (en la gzippant au assage histoire d'économiser la bande passante)
1.1.2) si elle n'existe pas en cache, je la génère, je la stocke en cache, et je la renvoie en spécifiant son header "last-modified"
Pb : Je n'obtiens jamais une réponse 304 quand je consulte une page, et je n'arrive pas à récupérer le paramètre "if-modified-since". Je renvoie donc systématiquement la page, et je préfèrerais éviter. Si quelqu'un qui a déjà été confronté à cette problématique pouvait me donner des pistes, ce serait super (me manque-t-il des headers par exemple).
Ci-après mon code de test
CODE
if (file_exists ($cache_file))
{
$if_modified_since = preg_replace('/;.*$/', '', $HTTP_IF_MODIFIED_SINCE);
$mtime = filemtime($cache_file);
$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");
ob_start("ob_gzhandler");
readfile ($cache_file);
ob_end_flush();
}
else
{
file_put_contents ($cache_file, "Je suis l'article $id créé le " . date ("d/m/Y h:i:s") . "<hr />" . file_get_contents ("lipsum.txt"));
ob_start("ob_gzhandler");
readfile ($cache_file);
ob_end_flush();
}
{
$if_modified_since = preg_replace('/;.*$/', '', $HTTP_IF_MODIFIED_SINCE);
$mtime = filemtime($cache_file);
$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");
ob_start("ob_gzhandler");
readfile ($cache_file);
ob_end_flush();
}
else
{
file_put_contents ($cache_file, "Je suis l'article $id créé le " . date ("d/m/Y h:i:s") . "<hr />" . file_get_contents ("lipsum.txt"));
ob_start("ob_gzhandler");
readfile ($cache_file);
ob_end_flush();
}