Afficher la dernière version d'un fichier php ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par poupilou, 8 Novembre 2021.

  1. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    906
    J'aime reçus:
    15
    Salut à tous,

    Je n'utilise pas de CMS pour mon site, je cherche une solution afin d'afficher dans le navigateur de mes internautes la dernière version d'un fichier php, j'utilise des include pour insérer mes fichiers php.

    Pour former une de mes pages html j'include plusieurs fichiers php :

    - en-tete.php
    - menu.php
    - page.php
    - footer.php

    Quelles seraient les meilleures solutions techniques ?

    Merci d'avance pour vos réponses.
     
  2. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 906
    J'aime reçus:
    296
    J'avoue je comprends pas :confused:
    «Vous pouvez répéter la question ?»
     
  3. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 906
    J'aime reçus:
    296
    Ah, tu veux dire que la page reste en cache dans le browser des visiteurs ? Ca n'est pas normal, les pages dynamiques sont envoyées par le serveur avec les instructions pour ne pas être en cache. Les pages statiques ok, mais pas celles générées par php.

    On peut ajouter ça (avant ton en-tete.php), mais encore une fois normalement c'est envoyé automatiquement par PHP :

    Code:
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    
     
  4. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    906
    J'aime reçus:
    15
    Merci rick38, oui c'est bien la question que je me posais : la page reste en cache dans le browser des visiteurs ?

    Voici l'analyse de l'en-tête d'une de mes pages.

    Code:
    HTTP/2:    200
    server:    nginx
    date:    Mon, 08 Nov 2021 11:50:22 GMT
    content-type:    text/html; charset=utf-8
    content-length:    10921
    x-powered-by:    PHP/7.2.34
    expires:    Thu, 19 Nov 1981 08:52:00 GMT
    cache-control:    no-store, no-cache, must-revalidate
    pragma:    no-cache
    set-cookie:    PHPSESSID=787s1vgpp2gb8mehe55hbv05td; path=/
    set-cookie:    monnaie=EUR%2B0.00%2B20; expires=Tue, 08-Nov-2022 11:50:22 GMT; Max-Age=31536000; path=/; domain=www.mon-site.com
    strict-transport-security:    max-age=31536000; includeSubDomains; preload
    vary:    Accept-Encoding,User-Agent
    content-encoding:    gzip
    x-powered-by:    PleskLin
    
    Dans mon fichier .htaccess j'ai ça :
    Code:
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
    </IfModule>
    <IfModule mod_deflate.c>
      # Compress HTML, CSS, JavaScript, Text, XML and fonts
      AddOutputFilterByType DEFLATE application/javascript
      AddOutputFilterByType DEFLATE application/rss+xml
      AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
      AddOutputFilterByType DEFLATE application/x-font
      AddOutputFilterByType DEFLATE application/x-font-opentype
      AddOutputFilterByType DEFLATE application/x-font-otf
      AddOutputFilterByType DEFLATE application/x-font-truetype
      AddOutputFilterByType DEFLATE application/x-font-ttf
      AddOutputFilterByType DEFLATE application/x-javascript
      AddOutputFilterByType DEFLATE application/xhtml+xml
      AddOutputFilterByType DEFLATE application/xml
      AddOutputFilterByType DEFLATE font/opentype
      AddOutputFilterByType DEFLATE font/otf
      AddOutputFilterByType DEFLATE font/ttf
      AddOutputFilterByType DEFLATE image/svg+xml
      AddOutputFilterByType DEFLATE image/x-icon
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE text/html
      AddOutputFilterByType DEFLATE text/javascript
      AddOutputFilterByType DEFLATE text/plain
      AddOutputFilterByType DEFLATE text/xml
    
      # Remove browser bugs (only needed for really old browsers)
      BrowserMatch ^Mozilla/4 gzip-only-text/html
      BrowserMatch ^Mozilla/4\.0[678] no-gzip
      BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
      Header append Vary User-Agent
    </IfModule>
    <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresDefault "access plus 14 days"
      ExpiresByType image/jpg "access plus 1 month"
      ExpiresByType image/gif "access plus 1 month"
      ExpiresByType image/jpeg "access plus 1 month"
      ExpiresByType image/png "access plus 1 month"
      ExpiresByType text/css "access plus 1 month"
      ExpiresByType application/pdf "access plus 1 month"
      ExpiresByType text/javascript "access plus 1 month"
      ExpiresByType text/x-javascript "access plus 1 month"
      ExpiresByType application/javascript "access plus 1 month"
      ExpiresByType application/x-shockwave-flash "access plus 1 month"
      ExpiresByType image/ico "access plus 1 month"
      ExpiresByType image/x-icon "access plus 1 month"
      ExpiresByType text/html "access plus 1 days"
    </IfModule>
    
    Le problème ne provient-il pas du Module mod_expires dans mon fichier .htaccess et des dates d'expiration de mes types de fichiers (jpg, html, css, etc....) ?

    Les urls finales de mes pages sont toutes en html et pas en php.
     
  5. Just Aware
    Just Aware Nouveau WRInaute
    Inscrit:
    2 Mars 2019
    Messages:
    39
    J'aime reçus:
    1
    Sauf indication contraire, les navigateurs mettent en cache.
    Même des pages php car au final le php génère du html pour le navigateur coté client.
    Le seul moyen de l'empêcher, est de mettre les en têtes données par Rick38.
    Mais dans ce cas, la page n'est jamais mise en cache, même si le contenu n'as pas changé, et la vitesse du site s'en ressent.
    Il n'y a pas de moyen de rafraichir uniquement si changement, c'est tout ou rien.
     
  6. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 906
    J'aime reçus:
    296
    Les pages php ne sont jamais mises en cache, comme le montre ton header, php envoie bien automatiquement ce qu'il faut :
    Code:
    cache-control:    no-store, no-cache, must-revalidate
    pragma:    no-cache
    Donc tu n'as rien à faire, ça fonctionne.
     
  7. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    906
    J'aime reçus:
    15
    Lorsque je modifie un fichier css sur mon site, je le télécharge ensuite sur mon serveur, je me connecte sur une page de mon site avec Chrome (j'avais auparavant déjà accédé à mon site donc les pages sont dans le cache de Chrome) et il ne m'affiche pas les modifications que j'ai faites dans mon fichier css, il faut que je vide le cache de Chrome et que je ré accède à mon site pour voir les modifications de mon fichier css.

    D'où ma question de départ : comment faire pour indiquer au navigateur de charger la dernière version d'un fichier ?
     
  8. Just Aware
    Just Aware Nouveau WRInaute
    Inscrit:
    2 Mars 2019
    Messages:
    39
    J'aime reçus:
    1
    Le css c'est diffèrent, c'est comme les javascript externe, si tu ne changes pas le nom, les visiteurs ont l'ancienne version en cache.
    Sur des grosses modifications, il vaut mieux changer le nom du css.
     
  9. emualliug
    emualliug WRInaute occasionnel
    Inscrit:
    1 Février 2020
    Messages:
    392
    J'aime reçus:
    77
    Y'a une combine pour forcer un CSS "à jour" qui consiste à ajouter un suffixe en fonction de la date de modification, et à l'ignorer par une RewriteRule.

    Si ça t'intéresse, je peux regarder ça. Par contre, c'est sur de la base Apache, pas NGINX.
     
  10. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    906
    J'aime reçus:
    15
    Merci pour vos réponses.

    N'y a-t-il un moyen de créer un script php qui compare la date de dernière modification d'un fichier (php, css, js, etc...) et si elle est différente de celle présent dans le cache du navigateur de l'internaute de lui indiquer de télécharger cette nouvelle version de fichier ?

    Ou bien alors, je stock dans un fichier php tous les noms et toutes les urls des fichiers (css, js) que je vais inclure dans mes pages via des include(...), faut-il manuellement à chaque fois que je modifie l'un de ces fichiers, le re-nommer en mon-fichier-2.css, mon-fichier-3.css, mon-fichier-4.css, etc...

    Tous les webmasters sont confrontés à ce problème : on met à jour des fichiers sur nos sites. Comment gérez-vous cela ?

    Comment gérer à la fois les problématiques de mise en cache (pour des questions de rapidité d'affichage des pages) et d'être certain que l'internaute a bien sous les yeux la dernière version d'un fichier (même s'il a visité notre site hier ou avant-hier) ?
     
  11. nicodak
    nicodak WRInaute discret
    Inscrit:
    21 Octobre 2020
    Messages:
    124
    J'aime reçus:
    32
    Bonjour,

    Changer le nom du fichier CSS parait être un bonne méthode.
    Maintenant quelle est la raison de vos modifications régulières du CSS ? En général une fois qu'on a trouvé son style on ne change plus grand chose, c'est le contenu qui change pas la forme.
     
  12. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 134
    J'aime reçus:
    325
    Pour le CSS, avec filemtime ça changera automatiquement l'URL à chaque fois qu'il est modifié, exemple :
    PHP:
    <?php
    $css 
    '/assets/css/styles.css';
    ?>
    <link href="<?php echo $css?>?<?php echo filemtime($_SERVER['DOCUMENT_ROOT'] . $css); ?>" rel="stylesheet">
     
    poupilou apprécie ceci.
  13. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    906
    J'aime reçus:
    15
    Merci spout, ta solution marche super bien.

    Comme quoi il suffit de rajouter pas grand chose pour faire de grande chose :)

    L'avantage de cette solution, c'est que ça gère tout seul cette problématique de télécharger toujours la dernière version d'un fichier css, pas besoin de changer manuellement le nom du fichier css.

    Est-ce que ça pourrait aussi fonctionner avec l'include de fichiers javascript ?
    Code:
    <?php
    $fichier_js = '/js/fichier_javascript.js';
    ?>
    <script src="<?php echo $fichier_js; ?>?<?php echo filemtime($_SERVER['DOCUMENT_ROOT'] . $fichier_js); ?>"></script>
    
     
  14. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 906
    J'aime reçus:
    296
    Mais ça fait un accès disque à chaque fois, on est peut-être dans la micro-optimisation mais j'évite à cause de ça :)
    Et oui ça marche aussi avec les .js, les images et tout ce qui est statique...
     
  15. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    906
    J'aime reçus:
    15
    Si tu as un fichier css comme celui là
    <link rel="../css/style.css?1636448407" />, si l'internaute l'a chargé dans son navigateur et si ce fichier css n'a pas été modifié, le navigateur de l'internaute utilisera celui du cache de son navigateur et il ne le re-téléchargera pas, il n'y aura pas un nouvel accès disque, non ?

    J'ai testé avec les .js et ça marche aussi :)
     
  16. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 906
    J'aime reçus:
    296
    Je parle de l'accès disque que fait la fonction filemtime() quand elle est exécutée.
    Mais c'est insignifiant, à moins que tu aies des millions de visiteurs.
     
  17. ABCWEB
    ABCWEB WRInaute passionné
    Inscrit:
    22 Octobre 2015
    Messages:
    1 209
    J'aime reçus:
    154
    je vois serveur nginx et tu parles de htaccess au risque de dire une connerie il y a pas un problème?
     
  18. poupilou
    poupilou WRInaute impliqué
    Inscrit:
    9 Février 2004
    Messages:
    906
    J'aime reçus:
    15
    Oui tu as raison, mes sites tournent sous un serveur nginx et j'ai des fichiers htaccess à la racine de chacun de mes sites et tout ça fonctionne.

    J'utilise principalement mes fichiers htaccess pour mettre en place des redirections d'urls, faut pas faire cela avec nginx :( ?
     
  19. ABCWEB
    ABCWEB WRInaute passionné
    Inscrit:
    22 Octobre 2015
    Messages:
    1 209
    J'aime reçus:
    154
    pour moi c'est pas compatible il un truc qui ressemble à ça quelque part :

    Code:
    location /
    {
    rewrite ^/.*-st([0-9]+).html /section.php?id_section=$1;
    
    
    }
    
     
  20. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 134
    J'aime reçus:
    325
    > Note: Les résultats de cette fonction sont mis en cache.
    Src : https://www.php.net/manual/fr/function.filemtime.php
     
  21. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 906
    J'aime reçus:
    296
    Donc si le fichier change, ça ne prend pas en compte la nouvelle valeur si on ne fait pas clearstatcache().
    Ou alors le cache ne dure que le temps de l'exécution du script, et auquel cas c'est comme s'il n'y en avait pas.

    [edit] A priori la durée est configurable dans le php.ini, par défaut 120 secondes, si c'est bien realpath_cache_ttl dont il s'agit.
     
    #21 rick38, 10 Novembre 2021
    Dernière édition: 10 Novembre 2021
  22. passion
    passion WRInaute accro
    Inscrit:
    6 Janvier 2006
    Messages:
    3 927
    J'aime reçus:
    191
    Tu dois avoir des règles de cache dans ton htaccess ou la config serveur.
    Faut désactiver la mise en cache générale des fichiers php.
    Plus intelligent que de la bidouille.
     
Chargement...
Similar Threads - Afficher dernière fichier Forum Date
afficher photo suivant nombre de vues, des dernières ... Développement d'un site Web ou d'une appli mobile 15 Mai 2011
comment afficher l erreur 404 URL Rewriting et .htaccess 28 Juillet 2021
Devra-t-on afficher les émissions de gaz à effet de serre de nos sites? Droit du web (juridique, fiscalité...) 28 Mars 2021
Afficher module avis Google sur un site web via le GTM ? Google : l'entreprise, les sites web, les services 18 Mars 2021
Afficher stats analytics sur mon site Google Analytics 14 Novembre 2020
Ne pas afficher certaines conversions dans Google Ads AdWords 8 Juillet 2020
Afficher les produits suivants en ajax Développement d'un site Web ou d'une appli mobile 12 Mai 2020
Google a-t-il le droit d'afficher directement les informations des sites sans leur accord ? Droit du web (juridique, fiscalité...) 21 Février 2020
API pour afficher les avis Google sur son site Google : l'entreprise, les sites web, les services 10 Novembre 2019
Afficher les tags sur wordpress Développement d'un site Web ou d'une appli mobile 3 Août 2019
Extension Chrome utile pour afficher le code source HTML, JS, CSS Développement d'un site Web ou d'une appli mobile 5 Juillet 2019
Google My Business :Comment afficher sa zone de couverture et pas son adresse ? Google : l'entreprise, les sites web, les services 19 Juin 2019
Afficher/cacher données dans un tableau Développement d'un site Web ou d'une appli mobile 9 Mars 2019
Afficher des valeurs d'une colonne à l'autre selon condition Développement d'un site Web ou d'une appli mobile 11 Février 2019
Google Chrome va afficher à nouveau les sous-domaines Google : l'entreprise, les sites web, les services 18 Septembre 2018
Google PageSpeed Insight : Afficher en priorité le contenu visible Développement d'un site Web ou d'une appli mobile 16 Août 2018
Afficher valeur id onclick sur checkbox Développement d'un site Web ou d'une appli mobile 21 Février 2018
Est-il important d'afficher ses pages en AMP pour être favorisé par Index Mobile First ? Référencement Google 19 Décembre 2017
Balise H1 modifiée pour s'afficher sur une seule ligne Référencement Google 3 Septembre 2017
[astuce] pour afficher les numéros dans les résultats de Google Référencement Google 27 Juin 2017