2013-05-13 24 views
11

Sto creando un modulo di input che consente agli utenti di caricare un'immagine. Una volta inviato, l'utente viene restituito al modulo con un bit di conformità nella parte superiore.PHP force refresh image

Qualsiasi immagine che è stata inviata viene quindi visualizzata in anteprima tramite una query su un database MySQL che memorizza l'URL dell'immagine. Tuttavia, se l'utente carica una foto, viene visualizzata in anteprima e quindi decide di cambiare quella foto e di inviare nuovamente il modulo, quando ti riporta al modulo la nuova foto non viene visualizzata a meno che non venga premuto manualmente l'aggiornamento sul browser.

Esiste un modo per forzare una cancellazione/aggiornamento della cache o un aggiornamento per quella specifica immagine piuttosto che per l'intera pagina?

Grazie

risposta

27

Aggiungere la data di modifica alla fine dell'immagine come una query.

<img src="/images/photo.png?=1239293"/> 

In PHP

<img src="/images/photo.png?=<?php echo filemtime($filename)?>"/> 
+0

Buona soluzione, suppongo che ingannare il browser nel ricaricarlo ... –

+0

Quale funzione consiglieresti per generare il timestamp? – DorianHuxley

+2

Ho appena aggiunto il punto interrogativo senza alcun timestamp quando ho ricaricato i browser ingannati. – bestprogrammerintheworld

2

Il trucco è quello di dire al browser di non memorizzare nella cache il contenuto. È possibile farlo mettendo queste dichiarazioni prima di ogni altra cosa (senza spazi o niente!)

<?php 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 
?> 

A seconda di come si sta caricando l'immagine, si può anche fare un aggiornamento javascript dell'immagine utilizzando jQuery.

+0

Che impatto ha questo sulla prestazioni in tempo? – DorianHuxley

+0

-1, non disabilitare la memorizzazione nella cache nell'intestazione per le immagini. Ciò costringerà l'immagine a essere scaricata per ogni caricamento di pagina. – cgTag

+0

Ciò farà sì che il browser non memorizzi nella cache il contenuto della pagina. Le prestazioni scenderanno, ma non molto significativamente; tuttavia, se hai molte immagini sulla pagina, potrebbe ridurlo in modo significativo. –

0
You could replace the current image by a new one using JavaScript: 

    <div id="imageHolder">this is where the image will show</div> 
    <script type="text/javascript"> 
    function myfunction(){ 
    document.getElementById("imageHolder").innerHTML="<div id=\"imageHolder\"><img src='imagefolder/imagename.jpg' alt=''/></div>"; 
    }</script> 

È necessario attivare la funzione myFunction dopo aver completato il caricamento, naturalmente ...

7

In PHP è possibile inviare un numero casuale o la corrente timestamp:

<img src="image.jpg?<?=Date('U')?>"> 

o

<img src="image.jpg?<?=rand(1,32000)?>"> 
0

questo ha lavorato molto per me:

image.jpg?=<?php echo rand() . "\n";?> 
+0

Grazie per la tua risposta, anche se l'ho risolto circa 4 anni fa: P – DorianHuxley