Question

Je veux faire un etag qui correspond à ce que Apache produit.Comment apache créer c'est etags?

Était-ce utile?

La solution

Apache utilise le format standard d'inode-taille-mtime.Le seul inconvénient de cette est que le mtime doit être d'époque et des zéros de sorte qu'il est de 16 chiffres.Voici comment le faire en PHP:

$fs = stat($file);
header("Etag: ".sprintf('"%x-%x-%s"', $fs['ino'], $fs['size'],base_convert(str_pad($fs['mtime'],16,"0"),10,16)));

Autres conseils

Une chose à retenir à propos de Apache Etags, c'est qu'ils ne jouent pas bien en grappes, car ils comprennent l'inode de l'information qui peut—et devrait—varier entre les machines dans le même cluster.

Si vous êtes de la génération dynamique de votre page, ce ne sera probablement pas faire sens.Si vous êtes en PHP, vous pouvez choisir l'inode et la taille de fichier du script principal, mais le modifier de temps ne vais pas vous dire si vos données ont changé.Sauf si vous avez un bon processus de mise en cache ou tout simplement de générer des pages statiques, les etags ne sont pas utiles.Si vous avez un bon processus de mise en cache, l'inode et la taille de fichier sont probablement pas pertinent.

Edit:Pour les personnes qui ne savent pas ce etags sont - ils sont censé être une valeur qui change lorsque le contenu a été modifié, pour la mise en cache.Le navigateur reçoit l'etag à partir du serveur web, le compare à l'etag pour sa copie mise en cache et extrait de la page entière si l'etag a changé.

la réponse ci-dessus (à partir de Chris) fonctionne bien, mais peut être simplifiée à l'aide d'un cast implicite dans le sprintf:

sprintf('"%x-%x-%x"', $s['ino'], $s['size'], str_pad($s['mtime'], 16, "0"));

L'a suggéré %016x ne fonctionne pas parce que le rembourrage est appliquée après la conversion en hexadécimal, plutôt qu'avant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top