Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Debutant - upload image

6 réponses
Avatar
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.

6 réponses

Avatar
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

Avatar
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:

Avatar
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

Avatar
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

Avatar
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

Avatar
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: