[spip-dev] entete Last-Modified:

Coucou,

certains moteurs de recherche travaillent avec l'entête http Last-Modified:
or spip ne le produit pas encore.

j'ai pensé faire la chose suivante :
* si on utilise le cache, on envoie la date du fichier cache
* sinon, on envoie la date courante.

J'ai fait mon patch tranquillement, mais bizarrement la séquence suivante
n'affiche pas la bonne date, il y a un décalage de quelques dizaines de
minutes... une idée ?

(Je vais "commiter" la modif, histoire que vous la voyiez in situ, la
correction doit être un truc à deux francs...)

<?
    $file = "/www/spip_diplo/CACHE/5/%2F";
    $lastmodified = filectime($file);
    echo mktime(0,0,$lastmodified,1,1,1970);
    echo "<br>" . date("D, d M Y H:m:s \\G\\M\\T", $lastmodified);
?>

(Je teste sur l'URL http://xxxxxxx/, donc le fichier cache est CACHE/5/%2F)

-- Fil

echo mktime(0,0,$lastmodified,1,1,1970);

Ouh la la, c'est pour trouver ton écart de minutes, que tu fais ça ?

Normalement, c'est la même chose que

echo $lastmodified;

Ton écart est constant ? Si oui, quel est-il ?

Nicolas.

@ Nicolas Hoizey <nhoizey@phpheaven.net> :

> echo mktime(0,0,$lastmodified,1,1,1970);

Ouh la la, c'est pour trouver ton écart de minutes, que tu fais ça ?

Non, c'est pour passer du format de date "epoch" ( date("U") ) au format
qui se trouve dans Last-Modified: (Mon, 11 Feb 2002 12:30:02 GMT)

Ah je suis ***! Pour heure-minutes-secondes c'est H:i:s qu'il faut mettre
dans le format !!

-- Fil

echo mktime(0,0,$lastmodified,1,1,1970);

Ouh la la, c'est pour trouver ton écart de minutes, que tu fais ça ?

Non, c'est pour passer du format de date "epoch" ( date("U") ) au format
qui se trouve dans Last-Modified: (Mon, 11 Feb 2002 12:30:02 GMT)

Nicolas a raison, ça ne sert à rien. Epoch et Unix Timestamp, c'est la même
chose par définition. D'ailleurs date("U") équivaut à time() qui est plus
court.

Sinon, pour faire du GMT il faut utiliser gmdate(), pas date() qui te
reverra l'heure locale.

Ah je suis ***! Pour heure-minutes-secondes c'est H:i:s qu'il faut
mettre dans le format !!

Oui, et c'est la fonction 'date()', pas 'mktime()' ... :stuck_out_tongue:

Nicolas.

Sinon, pour faire du GMT il faut utiliser gmdate(), pas date() qui te
reverra l'heure locale.

Vu !.. Avec "T" pour la mention du repère GMT...

Ce qui nous donne

    $lastmodified = filemtime($chemin_cache);
.../...
    // si pas le cache :
    $lastmodified = time();

.../...
    @Header ("Last-Modified: ".gmdate("D, d M Y H:i:s T", $lastmodified));

Commité dans une minute.

-- Fil