![]() |
naterati browser da uradi image reload
problem je u sledecem, kad se edituje slika u profilu treba naterati browser da refreshuje cache, da se stara slika ne bi pojavljivala vise... naravno lako je dodati neki random GET parametar da bi se ucitala nova slika na toj strani, obicno sam to do sad tako radio, ali ovde je problem sto se slika koristi na celom sajtu, pa ce ostatak sajta i dalje prikazivati staru sliku...Palo mi je napamet da na edit strani saljem drugaciji header, ali to nece raditi jer browser nece ni ucitavati sliku na toj strani jer mu je vec u keshu...
Jel postoji neka strategija da se ovo resi, znaci da nateram browser da ubije cache ? EDIT: Nixa mi je predlozio da menjam svaki put naziv (tj. putanju) slike kad se snima, sto ce mi resiti problem... Ali ajd da ostavim thread, mozda bude jos neka dobra ideja... |
$novoIme=$userID.'-'.time().$extenzijaFajla;
tj, nixino reshenje. to bi trebalo da radi ok sve dok je slika na fajl sistemu, ako ti je slika neki blob u bazi.... hmm.. onda probaj da saljes lastModified hedere uz heder o slici ili da opet odradis kao da je na fajlsistemu, a da imas rewrite rule koji uhvati userID, ime se promenilo zbog novog timestampa, on onda izvuce avatar iz baze i ne bi trebalo da bude problema :) (mada nisam siguran koliko bi to, i da li bi to opteretilo server na high traffic sajtovima) |
Mozes da ucitas sliku sa <img src="url_do_slike.jpg?nesto=nesto_razlicito" /> to ce sasvim normalno da prikaze jpg
Edit: izvini, nisam pažljivo pročitao pitanje, mislio sam kako useru da prikažeš da mu je slika promenjena kada uploaduje novu, a tebi u stvari treba da svi ostali takođe vide novu sliku. To možda možeš sa .htaccess <Directory "/path/gde/uploadujes/"> <FilesMatch "\.(jpg|png|gif)$"> Header set Cache-Control "max-age=7200, must-revalidate" </FilesMatch> </Directory> |
evo jednog od komentara ispod php.net/header
Citat:
drugi je problem sto su 90% primera po tutorijalima na netu, a i ponekoj knjizi ovakvi: Kôd:
<?php e sad, ja stvarno nisam testirao da li ce ovakav pristup definitivno naterati recimo IE6 da promeni sliku.. treba probati. |
Ja bih to uradio na nivou Apachea (ako je on uopste u pitanju :)
Probaj da stavis expire headere za slicice kako treba, na brzinu sam nasao primer: http://www.websiteoptimization.com/speed/tweak/cache/ Citat:
Koliko ja znam, browser bi trebao da osvezi svoj cache nakon tog perioda. |
E, upravo sam ja editovao svoj post sa istim predlogom :)
|
@blues: znam za to, spomenuh da sam obicno koristio GET kao resenje, ali to je resenje za tu stranu, a na nekoj drugoj strani ce i dalje da se vuce stara slika, jer slika.jpg i slika.jpg?nesto nisu isto u keshu.
@kodi: slike se naravo ne salju iz php, nego kao staticki fajlovi, ali cak i kad bih koristio php za to, opet postoji problem sto browser nece ni probati da ucitava tu sliku, jer su headeri namesteni za sve slike da se naravno kesiraju. Pa se ni skript nece pozvati odnosno novi header nece biti poslat. Elem, ova fora da svaki put dodam random element u putanju kad je snimam u bazu radi skroz ok, za sad najednostavnije resenje. Nije nixa za bacanje :) EDIT: e sad moram i ja da editujem post, bre :) Daklem, ok vam je ideja, ali onda mi se slike nece kesirati (to jest na kratko), a ne edituju se toliko cesto da bi se to isplatilo. |
Pa mozes implementirati taj expire header samo za slike na "after edit" strani - jer ce browser nakon toga osveziti i svoj cache (setuj expire na 0).
|
hmm, moguce da ja nesto ne kapiram dobro, ali mislim da nece... jer da bi osvezio cache settings preko headera on mora da ucita taj fajl, a on ga nece ucitati jer vec ima tu sliku u keshu (ukoliko se naziv slike ne menja)..
|
Mislim da gresis, mada mozda i ja nisam bio precizan, pogledaj ovo:
http://betterexplained.com/articles/...-http-caching/ Tu je objasnjeno u kojim slucajevima browser kesira, u zavisnosti od headera za trazeni fajl. Edit: mozda expiry header nije dobro resenje, mogao bi da probas sa eTag ili Last Modified. Ako te ne mrzi da se bakces sa tim :) |
a sto moze prosto , kada postoji i komplikovano resenje :)
|
Koristi lepo dinamicki get string, koji formiras za svaku sliku posebno... md5 postojece slike npr.
|
Sto bi racunao md5 svaki put kad se trazi. Dovoljno je da se uzme timestamp fajla. Brzo, a radi tacno ono sto treba.
|
Citat:
|
Vreme je GMT +2. Trenutno vreme je 12:44. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.