Domanda

Ho un problema a causa del quale gli utenti segnalano che le loro immagini non vengono caricate e quelle vecchie sono ancora lì. Ad un esame più attento le nuove immagini sono lì, hanno solo lo stesso nome di quella vecchia. Quello che faccio sul caricamento è che rinominare le immagini per scopi SEO. Quando eliminano un'immagine, il vecchio indice diventa disponibile e viene riutilizzato. Pertanto ha lo stesso nome di immagine.

C'è un modo per (ho pensato che forse ci potrebbe essere un meta tag per questo) per dire al browser di non usare la sua cahce?

La risposta migliore è rinominare l'immagine in qualcosa di totalmente nuovo. Ci lavorerò su, ma nel frattempo è la soluzione rapida mentre lavoro sul problema più grande.

È stato utile?

Soluzione

Aggiungi una stringa di query con un numero univoco arbitrario (o ora, o numero di versione, ecc.):

<img src="image.png?80172489074" alt="a cool image" />

Ciò comporterà una nuova richiesta, a causa del diverso URL.

Altri suggerimenti

È difficile. Vuoi davvero che le immagini vengano memorizzate nella cache, ma poi non vuoi memorizzarle nella cache una volta nuove disponibili:

  • L'uso dell'intestazione scade con una data nel passato impedisce qualsiasi memorizzazione nella cache. Bad
  • Aggiunta di un " busting della cache " Il parametro? 342038402 può risolvere il problema, ma può anche impedire che l'immagine venga mai memorizzata nella cache, il che non è quello che desideri. Bad.
  • L'utilizzo dell'intestazione scade con una breve (diciamo 1 ora) scade è meglio ... dopo un'ora l'utente vedrà l'immagine, ma il tuo server web non dovrà servirla ogni volta. Compromesso, ma a che ora funziona? Non proprio fattibile.

La soluzione? Mi vengono in mente due buone opzioni:

  • Guarda gli eTag e la tua capacità di usarli. Questi sono progettati per questa situazione. Il browser chiederà esplicitamente al tuo server se il file è aggiornato o meno. Puoi semplicemente attivarlo in apache se non lo hai già installato.
  • Crea un nuovo URL per ogni nuova immagine (e usa un'intestazione con scadenza molto futura). Questo è ciò su cui stai lavorando.

Puoi inserire http-equiv nel tag <meta> che dirà al browser di non usare la cache (o ancora meglio - usala in un modo definito), ma è meglio configurare il server per inviare http cache intestazioni. Consulta articolo sulla memorizzazione nella cache .

Tuttavia, alcuni browser potrebbero non supportare tutti gli http standard, ma credo che sia la strada da percorrere.

Aggiungi il datetime corrente all'immagine src:

<img src="yourImage.png?v=<?php echo Date("Y.m.d.G.i.s")?>" />

puoi controllare il comportamento della cache giocando con le intestazioni HTTP.

l'impostazione dell'intestazione scaduta in passato imporrebbe al browser di non utilizzare la versione cache.

Expires: Sat, 26 Jul 1997 05:00:00 GMT

Puoi consultare RFC per avere maggiori dettagli.

Se guardi i dati scambiati tra il tuo browser e il server, vedrai che il browser invierà una richiesta HTTP HEAD per le immagini. Il risultato conterrà il tempo di modifica (ma non i dati effettivi dell'immagine). Assicurarsi che questa volta cambi se l'immagine cambia sul server e il browser deve scaricare di nuovo l'immagine.

in PHP puoi usare questo trucco

<img src="image.png?<?php echo time(); ?>" />

La funzione time () mostra il timestamp corrente. Ogni caricamento della pagina è diverso. Quindi questo codice inganna il browser: legge un altro percorso e & Quot; think & Quot; che l'immagine viene modificata dall'ultima volta che l'utente ha visitato il sito. E deve scaricarlo di nuovo, invece di usare quello cache.

Diventa casuale. Basta usare un numero casuale e aggiungerlo con il nome file dell'immagine.

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

In PHP puoi inviare un numero casuale o il timestamp corrente:

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

o

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

non è stato un risultato positivo, penso che questo sia il modo di programmarlo correttamente.

 <td><?php echo "<img heigth=90 width=260 border=1 vspace=2 hspace=2 src=".$row['address']."?=".rand(1,999)."/>" ?></td>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top