Comment utiliser le cache HTTP avec PHP
J'ai un PHP 5.1.0 site web (en fait, c'est 5.2.9 mais il doit également s'exécuter sur 5.1.0+).
Pages sont générées dynamiquement, mais beaucoup d'entre eux sont principalement statique. En statique, je veux dire le contenu ne change pas, mais le "modèle" autour du contenu peut changer au fil du temps.
Je sais qu'ils sont plusieurs systèmes de cache et des frameworks PHP déjà là, mais mon hôte n'ont pas d'APC ou Memcached installé et je n'utilise pas de framework pour ce projet particulier.
Je veux les pages sont mises en cache (je pense que par défaut PHP "interdire" cache). Jusqu'à présent, je suis en utilisant:
session_cache_limiter('private'); //Aim at 'public'
session_cache_expire(180);
header("Content-type: $documentMimeType; charset=$documentCharset");
header('Vary: Accept');
header("Content-language: $currentLanguage");
J'ai lu plusieurs tutoriels mais je ne peux pas trouver quelque chose de simple (je sais cache est quelque chose de complexe, mais j'ai seulement besoin de quelques trucs de base).
Que sont les "doivent" avoir des en-têtes à envoyer pour aider à la mise en cache?
- Bienvenue sur StackOverflow. Grande première question!
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
private_no_expire
au lieu deprivate
, mais une longue expiration pour le contenu que vous savez ne va pas changer et assurez-vous de processusif-modified-since
etif-none-match
des demandes analogues à Emil post.Où
$etag
pourrait être une somme de contrôle sur la base du contenu ou de l'ID d'utilisateur, la langue et l'horodatage, par exemple,$if_none_match == $etag
avecrtrim(ltrim($if_none_match, "'\""), "'\"") == $etag
pour être sûr.$timestamp
en venir? Devraient-ils être définis avant le reste du code$timestamp = time();
à la place? Ai-je raté quelque chose?$timestamp = filemtime($fileName);
pourrait être utile pour obtenir la dernière date de modification du fichierVous devez avoir un en-tête Expires. Techniquement, il y a d'autres solutions, mais l'en-tête Expires est vraiment le meilleur, parce qu'il indique au navigateur de ne pas vérifier de nouveau la page, avant l'expiration de la date et de l'heure et servez-le tout simplement le contenu de la mémoire cache. Il fonctionne vraiment très bien!
Il est également utile de vérifier pour un Si-Modified-since en-tête de la requête à partir du navigateur. Cet en-tête est envoyée lorsque le navigateur est "pas sûr" si le contenu du cache est toujours la bonne version. Si votre page n'est pas modifiée depuis ce temps, il suffit de renvoyer un HTTP code 304 (Non Modifiée). Voici un exemple qui envoie un code 304 dix minutes:
Vous pouvez mettre cette case au début de votre code pour économiser les ressources du serveur.
Fixer une date pour la mise en cache de la page est un moyen utile de mettre en cache côté client.
Faites votre choix - ou de les utiliser tous les! 🙂
Voici une petite classe qui ne cache http pour vous. Il a une fonction statique appelée "Init" qui a besoin de 2 paramètres, un timestamp de la date de la page (ou tout autre fichier demandé par le navigateur) a été modifiée en dernier et la durée maximale, en secondes, que cette page peut être tenu en cache par le navigateur.
Je faisais JSON de la mise en cache sur le serveur en provenance de Facebook alimentation rien ne fonctionnait jusqu'à ce que j'ai mis rincer et se cacha le rapport d'erreurs. Je sais que ce n'est pas l'idéal de code, mais je voulais une solution rapide.
Cela a très bien fonctionné.