Gestion upload avatar, probleme de rafraichissement aprés up

Eléphanteau du PHP | 24 Messages

05 janv. 2012, 15:56

Bonjour,
J'utilise un vieux CMS pour un intranet, et je mets a jour le panneau utilisateur.
Je souhaite rajouter l'upload d'avatar.
J'ai récupéré des bouts de scripts avec jquery que j'ai adapté.
Tout marche nickel, sauf que l'image ne ne mets pas a jour immediatement.
Je penses que c'est parceque je garde toujours le meme nom d'image, alors ie ne rafraichit pas le cache...
l'image est toujours nommée id_utilisateur.jpg

voila mon code:

Code : Tout sélectionner

<script type='text/javascript'> $(document).ready(function(){ $('#image_upload_form').submit(function(){ $('div#ajax_upload_demo img').attr('src','modules/Your_Account/images/loading.gif'); }); $('iframe[name=upload_to]').load(function(){ var result = $(this).contents().text(); if(result !=''){ if (result == 'Err:big'){ $('div#ajax_upload_demo img').attr('src','modules/Your_Account/images/avatar_big.jpg'); return; } if (result == 'Err:format'){ $('div#ajax_upload_demo img').attr('src','modules/Your_Account/images/avatar_invalid.jpg'); return; } $('div#ajax_upload_demo img').attr('src',$(this).contents().text()); $('#ajax_upload_demo').fadeOut('slow').fadeIn('slow'); } }); }); </script> ... $avatarfile ='files/Users/'.$user.'/avatar/'.$uid.'.jpg'; if (!is_file($avatarfile)){ $avatarfile='modules/Your_Account/images/avatar_no.jpg'; } echo "<div id='ajax_upload_demo'> <form id='image_upload_form' method='post' enctype='multipart/form-data' action='modules/Your_Account/user/modules/add_avatar.php' target='upload_to'> <p><img src='". $avatarfile."' /></p> <p><input type='file' id='file_browse' name='image'/> <input type='submit' value='Submit'></p> <input type='hidden' name='username' value='".$user."'> <input type='hidden' name='uid' value='".$uid."'> </form> <iframe name='upload_to'> </iframe> </div>";
et le add_avatar.php:

Code : Tout sélectionner

if (count($_FILES)<1){ die('Err:format'); } $file = $_FILES['image']; $username = $_POST['username']; $uid = $_POST['uid']; $file = new File($file); $max_size = 1024000; $type = 'image'; $path = "../../../../files/Users/".$username."/avatar/"; $keep_name = true; $filename = $uid.'.jpg'; if ($file->type != $type){ die('Err:format'); } if ($file->size()>$max_size){ die('Err:big'); } $result = $file->copyFromTemp($path,$filename); if ($result){ die($result); } die('Err:format'); class File{ var $name = null; var $temp_name = null; var $extension = null; var $type = null; var $size = null; function File($file = null){ # $file is an entry from $_FILES if ($file != null){ $this->name = $file['name']; $this->temp_name = $file['tmp_name']; $this->size = $file['size']; $type = explode('/',$file['type']); $this->type = $type[0]; $this->extension = substr($this->name,strrpos($this->name, ".")+1); } else { return null; } } function name(){ return $this->name; } function type(){ return $this->type; } function size(){ return $this->size; } function tmp_name(){ return $this->temp_name; } function extension(){ return $this->extension; } function randomName(){ return md5(rand()) . "." .$this->extension; } function copyFromTemp($path,$filename){ if (move_uploaded_file($this->temp_name,$path.$filename)){ return $path.$filename; } return false; } }
Si je fait un f5 aprés l'upload j'ai bien la bonne image qui apparait...
Je penses que je m'y prends mal en fait...
Quelqu'un peut m'eclairer?
Merci d'avance
VooDoo

ViPHP
ViPHP | 2287 Messages

06 janv. 2012, 18:33

Tu peux "faire semblant" de changer le nom de l'image sans pour autant le faire réellement. Il te suffit d'ajouter une chaîne de paramètres derrière le nom de l'image dans l'url comme tu le ferais pour un script php :

Code : Tout sélectionner

/un/chemin/une_image.jpg?parametre=valeur_unique
Les paramètres n'affecteront pas l'accès à l'image sur le serveur, cependant pour ton navigateur il s'agira d'un contenu différent et le rafraîchissement sera ainsi forcé.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 4039 Messages

06 janv. 2012, 22:34

Ou alors tu inclus dans le nom du fichier avatar un timestamp.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.