Focer le rechargement d'image si changée

Avatar du membre
Eléphant du PHP | 224 Messages

03 sept. 2019, 23:43

COUIN !!! :P

Toujours sur mon site de webradio, et mes pochettes .

Alors dans l'admin du site, j'ai une liste de x titres avec leurs pochettes, et, lorsque je change des pochettes de titres (parce que j'en ai trouvé des meilleurs par exemple), je valide le formulaire, une page affiche les nouvelles pochettes envoyées, je peux choisir de cliquer sur les pochettes pour les cropper (dans une nouvelle fenêtre, pour ne pas paumer la liste des pochettes envoyées), ou de continuer directement, ce qui me ramène à la page listant les mêmes titres.

Problème, la page a toujours en mémoire les anciennes pochettes au lieu d'afficher les nouvelles.
Si je force l’actualisation de la page (CTRL F5), les nouvelles pochettes sont affichées.


J'avias dans un premier temps rajouté la notion de time à la suite du lien image dans le src mais ca ne fonctionnait pas.

Code : Tout sélectionner

<img src="<?php echo $lien_image; ?>?time=<?php echo time(); ?>" />

Je suis tomé sur un autre sujet où il était conné comme réponse de regarder le md5, muais cela ne marche pas non plus :(

Code : Tout sélectionner

<img src="<?php echo $lien_image; ?>?<?php echo md5_file($lien_image); ?>" />

Il y a potentiellement le même problème coté site visible par les auditeurs .

Y aurait-il une autre méthode (qui fonctionne si possible ) ?

Merkouin :D
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 sept. 2019, 10:30

Le temps de cache se définit dans un fichier .htaccess par type de fichier.

Regarde déjà dans la console de ton navigateur (Ctrl+Maj+i), onglet réseau, clique sur une image de pochette et regarde dans les headers leur durée de cache. Il faut regarder si tu as des entêtes "Expires" ou "Cache-Control".

Voici ce qu'il faut mettre dans un htaccess pour indiquer aux navigateurs de ne conserver qu'un cache d'1 heure (=3600 secondes) car ce n'est en général pas bien grave si lors d'un changement d'image il faut attendre une heure pour que ce soit visible chez tous les internautes, sachant que 1h de cache c'est par rapport à la dernière visite donc c'est 1h maximum et pour un visiteur n'ayant jamais visité ton site ça sera immédiat

Code : Tout sélectionner

# BEGIN Expire headers <IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access plus 3600 seconds" ExpiresByType image/jpeg "access plus 3600 seconds" ExpiresByType image/png "access plus 3600 seconds" ExpiresByType image/gif "access plus 3600 seconds" </IfModule> # END Expire headers # BEGIN Cache-Control Headers <IfModule mod_headers.c> <FilesMatch "\\.(jpe?g|png|gif)$"> Header set Cache-Control "max-age=3600, public" </FilesMatch> </IfModule> # END Cache-Control Headers
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Eléphant du PHP | 224 Messages

06 sept. 2019, 16:35

Hello,

Merci pour ta réponse :)

Il n'y a aucune autre solution ? Car j’avais du jouer sur le cache pour éviter le rechargement de autres images (background, boutons, etc etc) du site à chaque visite (évidement, je n'avais pas pensé aux pochettes, qui changeraient lol).
Il faudrait que ca puisse être sélectif, c'est pour ca que j'avais cherché une méthode relative au fichier pochette même et non au cache.
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 sept. 2019, 16:47

Il faudrait que ca puisse être sélectif,
Sur quoi se base la sélection ? quel critère ?

Si tu mets toutes tes pochettes dans un répertoire particulier, il suffit de mettre le .htaccess adapté dans ce répertoire et ça en concernera que les images de ce répertoire.

Si toutes tes pochettes ont un nom particulier (par exemple commence par cover_...), tu peux adapter la directive FilesMatch du .htaccess pour mettre l'expression régulière qui permettra d'être sélectif que sur ces fichiers.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Eléphant du PHP | 224 Messages

06 sept. 2019, 17:47

Si tu mets toutes tes pochettes dans un répertoire particulier, il suffit de mettre le .htaccess adapté dans ce répertoire et ça en concernera que les images de ce répertoire.
Ah j’avais pas pensé à ca mais en effet , elles sont dans un répertoire "covers" . Merci pour l'idée :)

Du coup, comment se passerait la gestion des htaccess ?
Je veux dire que pour le site (donc un htaccess à la racine), j'ai un cache d’une certaine durée, et si je met un htaccess avec avec une autre durée de cache, dans le répertoire /img/covers , ce dernier prendra son htaccess à la place de celui qui est à la racine ?

Merci :)
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 sept. 2019, 19:11

Exactement :-D
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Eléphant du PHP | 224 Messages

15 sept. 2019, 14:23

Hello,

Je vais voir à tester ça.
Par contre, concernant le rafraîchissement immédiat dans la partie admin des pochettes, ca ne marchera pas ?

Merkouin :)
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 sept. 2019, 00:02

Pour l'interface admin, tu peux ajouter un paramètre après le nom de ton image genre l'heure ou un identifiant unique comme ça tu es sûr de ne pas avoir de cache :
<img src="cover.jpeg?<?php echo uniqid(); ?>" />
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Eléphant du PHP | 224 Messages

30 sept. 2019, 14:16

Helloooo : )

Je vais tenter avec uniqid , mais j’avais mis déjà un "?md5_file($image)" (où bien sur $image est le lien image que l'on a dans le src) et cela n'avait rien donné.
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Avatar du membre
Mammouth du PHP | 1609 Messages

30 sept. 2019, 14:32

Salut, une solution est de modifier le nom du fichier à chaque fois que tu changes l'image. Par exemple tu pourrais faire nom-du-fichier-YmdHis.jpg.
Mais normalement en le mettant après le nom du fichier comme suggéré par @rthur ça doit aussi fonctionner : nom-du-fichier.jpg?YmdHis ou YmdHis pourrait être tiré de la date de modification du fichier, comme ça le fichier n'est rafraichit que si il est modifié.
Développeur web depuis + de 20 ans

Avatar du membre
Eléphant du PHP | 224 Messages

30 sept. 2019, 14:38

Hello,

Merci pour ta réponse :)

Je ne peux pas changer le nom dues fichiers car ils sont appelés par l'ID de la musique qui passe (en gros, si la musique qui passe a l'ID 5732, ce sera le fichier 5732.jpg qui sera affiché).
Pour ce qui est du rafraîchit que si il est changé, je pensais qu'avec le md5 du fichier (vu que le md5 change si le fichier change normalement ?) ça marcherait mais nan :( Je verrais ce que ça donne avec le uniqid() .
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Avatar du membre
Mammouth du PHP | 1609 Messages

30 sept. 2019, 14:51

En effet ça serait sensé fonctionner avec le md5 oui. Perso j'ai déjà pu le tester (avec une date plutôt qu'un md5 mais ça ne devrait pas faire de différence) et ça fonctionnait bien sous Firefox et Chrome.
Développeur web depuis + de 20 ans

Avatar du membre
Eléphant du PHP | 224 Messages

30 sept. 2019, 14:59

J’avais essayé le date aussi en tout premier, ca n'avais pouint marché :(
Pour ca que j’avais essayé avec le md5.
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen: