Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Impedire cache di immagine singola

    Ciao!

    Mi trovo ad affrontare un problema sulla utile cache.
    Mentre mi torna assolutamente comodo che le immagini del sito mi vadano in cache, mi risulta un problema per una sola di queste, che è un immagine che viene aggiornata quotidianamente mediante comodo ftp e che mantiene uguali tutte le caratteristiche compreso il nome (e l'indirizzo). Accade quindi che se il giorno prima è andata in cache, il giorno dopo nel browser dell'utente viene caricata sempre quella (o quella rimasta in cache) e mai la versione aggiornata.

    C'è uno script, magari solo un comando, che mi permette di isolare dal processo di cache quella specifica immagine?
    Ho cercato ma per ora trovo solo qualcosa che mi impedisce la cache di tutto...
    1 o 0, questo è il problema.

  2. #2
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    io saprei come, ma in php

    non so se può andare bene lo stesso
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  3. #3
    Se mi dici che è possibile e fattibile, certo che mi va bene, grazie, ma di php la mia conoscenza purtroppo è pari a zero assoluto, per cui se ci sono da fare operazioni particolari da solo non so come arrivarci Non so neppure di che requisiti devo disporre
    1 o 0, questo è il problema.

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    una possibile soluzione lato client:

    definisci normalmente l' immagine nell' xhtml, assegna ad essa un id

    ora occorre settare l' src di quell' immagine appendendo un valore sempre diverso all' indirizzo, x es.
    document.getElementById('id_immagine').src='/percorso/immagine.jpg?nocache='+new Date().getTime();

    quando richiamare questa istruzione?
    - se usi una libreria che gia' gestisce l' esecuzione di codice al DOMload, l' esegui li'
    idem se vuoi usare un onDOMload standalone
    - se non ti infastidisce immergere script nel body richiami l' istruzione subito dopo aver definito l' immagine
    - a mali estremi, richiami l' istruzione al window.onload, ma e' sconsigliabile perche' prima di tutto carica l' immagine definita nel markup e poi ne cambia l' src (= carichi comunque due immagini, anche se una probabilmente gia' in cache...)

  5. #5
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  6. #6
    Allora... In php potresti fare così.

    Ma visto che non usi PHP devi trovare un modo per passare un parametro alla tua immagine via JS.

    L'unico modo è sostituire il tuo tag [img]tuaimmagine.jpg[/img] ad una cosa del genere:
    codice:
    <script>document.write('[img]tuaimmagine.jpg?'+ Math.Random() +'[/img]')</script>
    Praticamente fai fare a Javascript il lavoro che avrebbe dovuto fare PHP

    Prova e dicci se va bene!

  7. #7
    Grazie blekm
    grazie Xinod
    e grazie Napolux

    Credo proprio che mi abbiate aiutato a risolvere il problema.

    ora devo uscire di corsa, appena torno provo e vi faccio sapere.

    Ciao.
    1 o 0, questo è il problema.

  8. #8

    Allora...

    Napolux, ho provato la tua soluzione
    <script>document.write('[img]tuaimmagine.jpg?'+ Math.Random() +'[/img]')</script>
    , non mi carica l'immagine. A meno che non abbia sbagliato l'inserimento nell'Html... ma non credo, almeno spero.
    Ho inserito quella riga dove prima c'era quella semplice precedente. Se ho sbagliato scusa.



    Ho provato la versione individuata nella discussione linkata da Blekm , e fornita da serdominik / dottwatson .

    Quindi il codice si è trasformato così:
    [img]tuaimmagine.jpg?t=<?php echo time();?> [/img]
    Carica l'immagine. Funziona. Sembra, funzionare, ma in realtà non mi pare funzioni.
    Difatti l'immagine viene sostituita solo con il reaload (con pagina già caricata senza aver risultati, clicco sul bottone di reload del browser e funziona (prima nemmeno così funzionava)), non con il load (digito indirizzo + invio).
    Quindi se alla mattina del giorno dopo, o del secondo dopo, l'utente digita l'indirizzo della pagina sul browser e preme invio, credo che carichi l'immagine vecchia, e se successivamente fa il reload normale (non serve il CTRL + F5) funziona tanto che carica l'immagine vecchia e la sostutuisce in diretta con quella nuova.
    Praticamente quello che dice Xinod quando parla di window.onload


    Non avevo detto, non mi sembrava importante, che l'immagine veniva poi stabilita a link in mezzo a un a href , ma non ha cambiato i risultati.



    Ora devo provare ad applicare la versione di Xinod
    document.getElementById('id_immagine').src='/percorso/immagine.jpg?nocache='+new Date().getTime();
    e lo faccio all'interno del body... ma credo di non aver capito come fare. Non sputatemi in un occhio :-) , per me è ancora linguaggio ostico. Se mi puoi fare l'esempio completo, Xinod, ti ringrazio. Per ora da solo sono riuscito ad avere, nei due tentativi, due errori e un'immagine non caricata.
    1 o 0, questo è il problema.

  9. #9
    Utente bannato
    Registrato dal
    Jan 2009
    Messaggi
    152
    Originariamente inviato da Napolux
    codice:
    <script>document.write('[img]tuaimmagine.jpg?'+ Math.Random() +'[/img]')</script>
    Il tipo di soluzione è valido; ma è Math.random() NOT Math.Random()

  10. #10

    Re: Allora...

    Napolux,
    <script>document.write('[img]tuaimmagine.jpg?'+ Math.Random() +'[/img]')</script>
    ho trovato l'errore, Random era scritto con la R maiuscola e non funzionava.

    Adesso funziona, e senza fare il reload, su FF e SA ultima versione, e su IE 7

    Dà solo un piccolo bug (su FF e IE, SA è ok), in quanto l'immagine è inserita in una tabella che ora ha aumentato di qualche pixel la sua altezza e quindi mi deforma il bordo sottostante (creato con le tabelle) rendendomelo doppio.
    Chissà perché. Forse perché ho dovuto togliere il border="0"? Qualcuno lo sa?


    Blekm,
    mi serviva anche un no-cache per una pagina intera, e su quello non ho chiesto. La discussione citata da te mi è tornata molto utile, e mi ha fornito questa soluzione
    <meta http-equiv="cache-control" content="no-cache"/>
    che però non funziona con IE (almeno il 7).
    Sostituendo però "cache-control" con "Pragma" , funziona anche su IE (almeno il 7)
    1 o 0, questo è il problema.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.