IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

HTML Discussion :

Mise en cache de fichiers html php et css


Sujet :

HTML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut Mise en cache de fichiers html php et css
    Bonsoir

    Je ne sais pas trop si je pose ma question au bon endroit vu qu'il englobe plusieurs domaines.

    Je voudrais savoir comment les navigateurs gèrent la mise en cache de certains fichiers particuliers : les css par exemple. Si on crée un fichier css avec le style de son site, puis qu'on le modifie par la suite, l'ancien fichier reste t'il en cache ? Ce qui poserait problème vu qu'on ne peut pas faire de mise à jour, c'est à dire cliquer sur le bouton actualiser... ça actualise que la page html et non le fichier css ?

    Autre type de fichier : les php. Mon cas particulier : je souhaite faire un fichier php que je voudrais inclure dans mes pages web, c'est le même problème ?? ...

    On ne peut pas mettre de balise meta ni dans l'un ni dans l'autre, alors ils risquent de ne pas s'afficher correctement. Les visiteurs risquent de ne pas voir les pages mises à jour ??

    Merci de votre aide.

  2. #2
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Oui les navigateurs garde tous les fichiers en cache.
    Le plus difficile à forcer la mis à jour est le fichier css En particulier sous IE
    quand il veut pas le mettre à jour c est particulierement penible.

    La gestion de la cache differe beaucoup selon les navigateurs.
    Pour developer sous FF2 tu peux la desactiver et effacer tous les fichiers temporaires automatiquement (dans les options) quand tu quittes le navigateur pour tous remettre à plat.
    Pour les appli en prod. tu peux mettre dans les en tete des pragma no cache et des update avec les META. Mais ce sont des directives purement indicative. Si un proxy cache ou IE n'a pas envie de les prendre en compte à ce moment la c est

    En general sur 2 jours la cache temporaire est rarement conservé ce qui fait que le probleme n'arrive pas si souvent en production. Par contre quand tu developes c'est pas la meme chanson.

  3. #3
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonjour,

    Pour les appli en prod.
    Cette partie là je ne l'ai pas comprise...

    En ce qui concerne la balise META je connais et j'utilise. Ma question était plus précise : en ce qui concerne les fichiers css et les fichiers php (dans le cas particulier que je donne : soit un fichier extérieur qu'on veut intégrer à une page html par integer). Pour ces fichiers on ne peut pas utiliser la balise META : on ne peut pas en mettre dans un fichier css ??? ni dans un fichier php à intégrer (une balise meta se retrouverait en plein milieu du code, entre les <body>...)

    Alors est ce que cela pose réellement problème ?? Ce ne doit pas être une question neuve ou originale, cela est très important à mon sens et donc si cela pose problème cela a du être largement commenté ? (j'ai rien trouvé par recherche).

  4. #4
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Desolé pour les raccourcis :

    pour les applications en productions c'est le contraire des applications en developement.
    La css ne change pas souvent pour les applications en productions.

  5. #5
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonjour

    J'ai bien trouvé ça :
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    En particulier :
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    Mais est ce que ceci va fonctionner dans un fichier css ? et dans un fichier php qui sera à inclure au milieu d'un autre ???

    Mes questionnements ne semblent pas soulever beaucoup de commentaires !! Alors que cela me semble quand même être une question primordiale : si un visiteur ne peut pas voir un site à jour parce que les fichiers css et php "à inclure" restent dans le cache pendant plusieurs voire semaines !!?!??!?

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Une manière infaillible est de mettre un timestamp derrière l'appel de ton fichier.

    Exemple en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <link rel="stylesheet" href="style.css?<?=date('YmdHis')?>" type="text/css" />

  7. #7
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Bonjour,

    J'ai enlevé "Résolu" parce que j'ai enfin testé toutes ces informations...

    Et ... ça ne fonctionne pas...

    En ce qui concerne les include, ils se font peut être coté serveur mais vu que le contenu html qui est inclus avec include est sauvegardé avec la page en cache, si on ne réactualise pas on affiche le fichier en cache et non le fichier réactualisé.

    Il en est de même pour le code php dans une page.

    Enfin le "filemtime" ne fonctionne pas non plus pour ce que j'ai indiqué ci dessus : le code php génère du code html qui est mis en cache, c'est ce qui est en cache qui est affiché sauf à actualiser la page.

    De tout ceci j'ai fait des tests sur un site de free, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
    <html>
    <head>
    <title>Titre</title>
    <meta http-equiv="Content-Style-Type" content="text/css">
    <meta http-equiv="Expires" content="Fri, 1 Sept 2007 07:00:00 GMT">
    <link rel="stylesheet" href="style.css?<?=filemtime('style.css')?>" type="text/css">
     
    </head>
     
    <body>
     
    bonjour aurevoir rebonjour blablabla rerireirieri
     
    <?php echo '<br><br> ceci est un essai en php - ceci est la modification <br> autre modif'; ?>
     
    <?php include 'inclusion.php'; ?>
     
    </body>
    </html>
    Code Fichier Include : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <br><br><br><br>ceci est une inclusion ; ceci est une inclusion ; ceci est une inclusion.
    <br><br><br>

    Alors y'a t'il une chose que j'ai mal compris ?? ou une erreur dans mon code...

    Bref il me semble qu'il ne reste que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Expires" content="Fri, 1 Sept 2007 07:00:00 GMT">

  8. #8
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Salut,

    A ce stade je te conseil de regarder le traffic http pour voir ce qu'il y a dans les
    entête. Savoir si la requête est réellement faite ou pas. si oui, regarder si il s'agit d'un GET, HEAD ou si il y a un If Modified Since. Observe les en-têtes Cache-Control
    et Pragma.

    Installe LiveHttpHeaders ou FireBug sur ton FireFox et regarde ce qu'il se passe.

  9. #9
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    J'utilise une méthode quasi infaillible pour les fichiers flash et java qui sont très souvent sujet à une mis en cache. C'est pas élégant mais c'est très efficace. Voila j'ai fais une méthode qui va chercher le fichier le plus récent du répertoire selon un certain pattern de départ. La fin de nom de fichier je met toujours un timestamp.(Exemple avec la style.css ça donne style200707051925.css). J'ai fait un script ANT qui me fait tous ça automatiquement quand je build les fichiers applet mais fondamentalement ça fonctionne pour tous le fichiers (j'ai fais ça pour les .swf aussi).
    Avantage :

    • en lisant le code source on sait si c'est le bon fichier.
    • ça optimise la gestion de la cache du coup ça reduit la charge reseau et ça charge plus vite.


    Désavantage :
    • Consomme un peu plus de ressource CPU sur le serveur

  10. #10
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    PHP s'exécute côté serveur, donc la page est rechargée à chaque fois, donc aucun problème de cache !
    Si tu fais une modification elle sera automatiquement prise en compte.

    Si tu veux résoudre le problème, il suffit de rendre ta feuille de style dynamique. "styles.php"

  11. #11
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Citation Envoyé par blueice
    Si tu fais une modification elle sera automatiquement prise en compte.
    Ben ça dépend ! Et c'est ce que je n'avais pas compris tout de suite : je vais au pire : si la page html n'a pas de "meta expire" que l'internaute ne fais pas "actualiser" et qu'il a un cache gigantesque ça pourrait durer des semaines avant qu'il ne voit ces mises à jour.

    Non en fait plus je réfléchis et moins je comprends...

    Dans le cadre du filemtime pour un css : le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?=filemtime('style.css')?>
    donne par exemple dans le fichier html après interptation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    href="style.css?1183653418"
    c'est à dire si on affiche la page et qu'on affiche la source.

    Ce que j'ai fait lors de mes tests : j'ai quitté la page html en question, puis j'ai modifié le fichier css, et puis je suis retourné sur la page html, la modification ne s'est pas appliquée. En affichant la source de la page, le code html du code php, soit href="style.css?1183653418" reste le même, en faisant actualiser et en revenant sur la source, alors et seulement là cette suite de chiffres est modifiée.
    Logique, puisque le résultat html produit par le code php est mis en cache, que le php soit modifié coté serveur, le navigateur s'en fou puisqu'il cherche la page dans le cache...

    Ai-je bien compris là ??

  12. #12
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Il me semble que tu as bien compris,
    Il faut que tu appliques le système de timestamp à l'URL qui donne accès a ta page.
    Ce genre de problème arrive souvent avec les proxy cache.
    http://www.mysite.fr/test.html?id=3213132123
    Perso j'ajoute le systeme currenttime en milliseconde a la fin de chaque URL

  13. #13
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Pas sûr que tu es tout compris.
    Le fait qu'une page soit en php, fait, qu'elle est rechargée à CHAQUE fois, puisqu'à chaque requête de la page, le serveur la traite et l'envoi à ton navigateur, donc si tu affiches une page avec une css statique et que tu modifies la css, la css est conservée dans le cache du navigateur, même si la page est en PHP, par contre si ta feuille de style est dynamique, le cache sera remplacée sur chaque page.

  14. #14
    Expert confirmé
    Avatar de 12monkeys
    Homme Profil pro
    Webmaster
    Inscrit en
    Novembre 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4 093
    Par défaut
    Désolé

    J'ai du écrire ces bétises pour me rendre compte de leur énormité ! Je confonds en fait la mise en cache des fichiers css et include... et le résultat que cela entraine dans la page qui, elle est mise en cache.

    Me trompe-je ??

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/09/2011, 21h21
  2. Mise à jour d'un fichier html
    Par saramery dans le forum Langage
    Réponses: 6
    Dernier message: 17/11/2008, 17h11
  3. [PDF] Transformer un fichier html/php en pdf
    Par super-java dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 05/06/2008, 20h15
  4. Aller contre la mise en cache du navigateur avec PHP
    Par sosophie dans le forum Langage
    Réponses: 3
    Dernier message: 12/01/2008, 11h14
  5. Mise en cache des fichiers Js sur IE et FF
    Par seb0634 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 19/10/2007, 19h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo