Bonjour, j'apprends le PHP et je recontre mon 1er réel problème auquel je ne
trouve pas la réponse dans le livre que j'ai acheté.
J'ai fait un formulaire en mode 'POST' qui est traité par un fichier
'script.php'
Je permet d'uploader une image, que je déplace du dossier 'tmp' vers en
dossier de mon serveur ,et ensuite de l'afficher via le code:
Lorsque je revient sur mon formulaire et que j'upload une autre image, une
fois validé le formulaire, mon script affiche toujours l'ancienne image, et
je suis obligé de raffraichir la page 'script.php' pour que ce soit bien la
nouvelle
image qui apparaisse....
J'espere que j'ai été clair parce que j'en ai pas trop l'impression ;-)...
Je pense que vous m'aurez compris.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Etienne SOBOLE
Lorsque je revient sur mon formulaire et que j'upload une autre image, une fois validé le formulaire, mon script affiche toujours l'ancienne image, et je suis obligé de raffraichir la page 'script.php' pour que ce soit bien la nouvelle image qui apparaisse....
c'est pas un probleme de PHP mais de cache du navigateur... celui-ci ne redemandant pas le chargement de l'image qu'il a en cache.
Il n'y a rien a faire sauf à changer le nom de l'image sur le serveur pour que le navigateur soit obligé de la recharger à chaque fois. donc lorsque tu fais ton move_uploaded_file la destination doit avoir un nom différent à chaque fois. voir la fonction tempnam qui t'aidera pour ca.
Sauf que des fois, tu n'as pas du tout envie que ton image ne porte pas le nom original de l'image. alors la t'es ma ;)
Faut ruser grave. une des solutions possibles est de remplacer dans ta page html ton lien <img src='/img/image.jpg'>
par <img src='/img/image.jpg?x=<?= md5('/img/image.jpg') ?>'> avec un chemin absolu pour la fonction md5 évidement.
dans ce cas, tu peux raisonablement estimer que le md5 de l'image sera différent pour chaque image, et donc que le navigateur ne possédera par l'image en cache.
Attention toute fois. meme si ca marche, ca va générer un md5 a chaque fois, et ca bouffe du cpu... A la limite tu peux remplacer le md5 par filemtime qui doit etre plus rapide, et offrir a peu de chose pret le meme résultat.
voila Etienne
Lorsque je revient sur mon formulaire et que j'upload une autre image, une
fois validé le formulaire, mon script affiche toujours l'ancienne image,
et
je suis obligé de raffraichir la page 'script.php' pour que ce soit bien
la
nouvelle
image qui apparaisse....
c'est pas un probleme de PHP
mais de cache du navigateur... celui-ci ne redemandant pas le chargement de
l'image qu'il a en cache.
Il n'y a rien a faire sauf à changer le nom de l'image sur le serveur pour
que le navigateur soit obligé de la recharger à chaque fois.
donc lorsque tu fais ton move_uploaded_file
la destination doit avoir un nom différent à chaque fois. voir la fonction
tempnam qui t'aidera pour ca.
Sauf que des fois, tu n'as pas du tout envie que ton image ne porte pas le
nom original de l'image.
alors la t'es ma ;)
Faut ruser grave.
une des solutions possibles est de remplacer dans ta page html ton lien
<img src='/img/image.jpg'>
par <img src='/img/image.jpg?x=<?= md5('/img/image.jpg') ?>'>
avec un chemin absolu pour la fonction md5 évidement.
dans ce cas, tu peux raisonablement estimer que le md5 de l'image sera
différent pour chaque image, et donc que le navigateur ne possédera par
l'image en cache.
Attention toute fois. meme si ca marche, ca va générer un md5 a chaque fois,
et ca bouffe du cpu...
A la limite tu peux remplacer le md5 par filemtime qui doit etre plus
rapide, et offrir a peu de chose pret le meme résultat.
Lorsque je revient sur mon formulaire et que j'upload une autre image, une fois validé le formulaire, mon script affiche toujours l'ancienne image, et je suis obligé de raffraichir la page 'script.php' pour que ce soit bien la nouvelle image qui apparaisse....
c'est pas un probleme de PHP mais de cache du navigateur... celui-ci ne redemandant pas le chargement de l'image qu'il a en cache.
Il n'y a rien a faire sauf à changer le nom de l'image sur le serveur pour que le navigateur soit obligé de la recharger à chaque fois. donc lorsque tu fais ton move_uploaded_file la destination doit avoir un nom différent à chaque fois. voir la fonction tempnam qui t'aidera pour ca.
Sauf que des fois, tu n'as pas du tout envie que ton image ne porte pas le nom original de l'image. alors la t'es ma ;)
Faut ruser grave. une des solutions possibles est de remplacer dans ta page html ton lien <img src='/img/image.jpg'>
par <img src='/img/image.jpg?x=<?= md5('/img/image.jpg') ?>'> avec un chemin absolu pour la fonction md5 évidement.
dans ce cas, tu peux raisonablement estimer que le md5 de l'image sera différent pour chaque image, et donc que le navigateur ne possédera par l'image en cache.
Attention toute fois. meme si ca marche, ca va générer un md5 a chaque fois, et ca bouffe du cpu... A la limite tu peux remplacer le md5 par filemtime qui doit etre plus rapide, et offrir a peu de chose pret le meme résultat.
voila Etienne
Frederic Rouchouze
c'est pas un probleme de PHP mais de cache du navigateur... celui-ci ne redemandant pas le chargement de l'image qu'il a en cache.
Il n'y a rien a faire sauf à changer le nom de l'image sur le serveur pour que le navigateur soit obligé de la recharger à chaque fois.
Y'a pas moyen d'utiliser les entête HTPP de gestion du cache ? -- Frédéric Rouchouze mailto:
c'est pas un probleme de PHP
mais de cache du navigateur... celui-ci ne redemandant pas le chargement
de l'image qu'il a en cache.
Il n'y a rien a faire sauf à changer le nom de l'image sur le serveur pour
que le navigateur soit obligé de la recharger à chaque fois.
Y'a pas moyen d'utiliser les entête HTPP de gestion du cache ?
--
Frédéric Rouchouze
mailto:fredchou@nospam.free.fr
c'est pas un probleme de PHP mais de cache du navigateur... celui-ci ne redemandant pas le chargement de l'image qu'il a en cache.
Il n'y a rien a faire sauf à changer le nom de l'image sur le serveur pour que le navigateur soit obligé de la recharger à chaque fois.
Y'a pas moyen d'utiliser les entête HTPP de gestion du cache ? -- Frédéric Rouchouze mailto:
Etienne SOBOLE
Y'a pas moyen d'utiliser les entête HTPP de gestion du cache ?
hum, ben c'est guere plus simple. si tu veux changer les entètes, il faut que ton image soit un script, car la gestion du cache se fait (si je ne me trompe) dans le fichier demandé... c'est a dire que c'est le header de l'image qui compte et pas le header de la page html qui contient l'image.
c'est a dire que si tu upload un gif, ben faut que tu remplace le lien par un sript php qui va renvoyer le gif. t'as pas trop de possibilité d'aller envoyer des entètes directement depuis le gif !
avec un .htaccess bien senti tu peux peut etre t'en sortir, mais ca va pas être simple et surtout ca risuqe d'invalider le cache pour tout tes gif.
Etienne
Y'a pas moyen d'utiliser les entête HTPP de gestion du cache ?
hum, ben c'est guere plus simple.
si tu veux changer les entètes, il faut que ton image soit un script, car la
gestion du cache se fait (si je ne me trompe) dans le fichier demandé...
c'est a dire que c'est le header de l'image qui compte et pas le header de
la page html qui contient l'image.
c'est a dire que si tu upload un gif, ben faut que tu remplace le lien par
un sript php qui va renvoyer le gif.
t'as pas trop de possibilité d'aller envoyer des entètes directement depuis
le gif !
avec un .htaccess bien senti tu peux peut etre t'en sortir, mais ca va pas
être simple et surtout ca risuqe d'invalider le cache pour tout tes gif.
Y'a pas moyen d'utiliser les entête HTPP de gestion du cache ?
hum, ben c'est guere plus simple. si tu veux changer les entètes, il faut que ton image soit un script, car la gestion du cache se fait (si je ne me trompe) dans le fichier demandé... c'est a dire que c'est le header de l'image qui compte et pas le header de la page html qui contient l'image.
c'est a dire que si tu upload un gif, ben faut que tu remplace le lien par un sript php qui va renvoyer le gif. t'as pas trop de possibilité d'aller envoyer des entètes directement depuis le gif !
avec un .htaccess bien senti tu peux peut etre t'en sortir, mais ca va pas être simple et surtout ca risuqe d'invalider le cache pour tout tes gif.
Etienne
Thierry Boudet
On 2005-06-01, Etienne SOBOLE wrote:
A la limite tu peux remplacer le md5 par filemtime qui doit etre plus rapide, et offrir a peu de chose pret le meme résultat.
Et même par time() qui évite un accès disque, non ?
-- _/°< coin
On 2005-06-01, Etienne SOBOLE <etienne-nospam@tlk.fr> wrote:
A la limite tu peux remplacer le md5 par filemtime qui doit etre plus
rapide, et offrir a peu de chose pret le meme résultat.
Et même par time() qui évite un accès disque, non ?
A la limite tu peux remplacer le md5 par filemtime qui doit etre plus rapide, et offrir a peu de chose pret le meme résultat.
Et même par time() qui évite un accès disque, non ?
-- _/°< coin
Etienne SOBOLE
Et même par time() qui évite un accès disque, non ?
hum non. l'idée est d'empècher l'utilisation du cache une seul fois! c'est a dire lorsque l'image est changée. le paramètre doit donc être lié au fichier sinon l'image va être re téléchargée à chaque fois.
et ca c'est pas cool. Etienne
Et même par time() qui évite un accès disque, non ?
hum non.
l'idée est d'empècher l'utilisation du cache une seul fois! c'est a dire
lorsque l'image est changée.
le paramètre doit donc être lié au fichier sinon l'image va être re
téléchargée à chaque fois.
Et même par time() qui évite un accès disque, non ?
hum non. l'idée est d'empècher l'utilisation du cache une seul fois! c'est a dire lorsque l'image est changée. le paramètre doit donc être lié au fichier sinon l'image va être re téléchargée à chaque fois.
et ca c'est pas cool. Etienne
Frederic Rouchouze
si tu veux changer les entètes, il faut que ton image soit un script, car la gestion du cache se fait (si je ne me trompe) dans le fichier demandé... c'est a dire que c'est le header de l'image qui compte et pas le header de la page html qui contient l'image.
Merci, je n'y avais pas pensé ! Cette solution me plaît car je m'apprêtais à gérer toutes mes images comme ceci pour des raisons de sécurité. -- Frédéric Rouchouze mailto:
si tu veux changer les entètes, il faut que ton image soit un script, car
la gestion du cache se fait (si je ne me trompe) dans le fichier
demandé... c'est a dire que c'est le header de l'image qui compte et pas
le header de la page html qui contient l'image.
Merci, je n'y avais pas pensé ! Cette solution me plaît car je m'apprêtais à
gérer toutes mes images comme ceci pour des raisons de sécurité.
--
Frédéric Rouchouze
mailto:fredchou@nospam.free.fr
si tu veux changer les entètes, il faut que ton image soit un script, car la gestion du cache se fait (si je ne me trompe) dans le fichier demandé... c'est a dire que c'est le header de l'image qui compte et pas le header de la page html qui contient l'image.
Merci, je n'y avais pas pensé ! Cette solution me plaît car je m'apprêtais à gérer toutes mes images comme ceci pour des raisons de sécurité. -- Frédéric Rouchouze mailto: