Debutant - upload image

Le
Mickael
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:

--
move_uploaded_file($_FILES['fichier']['tmp_name'],'img/image.jpg');
echo "<img src='img/image.jpg'></img>";
--

Et le résultat est OK, l'image s'affihe.

Seulement voilà:

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.

Quelqu'un peut-il m'aider ???

Merci par avance.

--

Mickael.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Etienne SOBOLE
Le #784953
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

par 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
Le #784560
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
Le #790509
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
Le #790504
On 2005-06-01, Etienne SOBOLE
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
Le #790395
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
Le #788271
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:

Poster une réponse
Anonyme