Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> warunkowe odświeżanie s serwera zamiast z pamieci podrecznej przegladarki
BartT
post 16.03.2011, 08:52:37
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.06.2004

Ostrzeżenie: (0%)
-----


Witam
Proszę o pomoc w sprawie wywołania efektu odświeżenia strony w taki sposób aby obrazki zostały pociągnięte z serwera a nie z cache'a.
W formularzu wysyłam na serwer obrazek, który po obróbce zostaje zapisany pod konkretną nazwą jako plik i jako wpis w mysql. Nazwa obrazka jest niezmienna - po zmianie obrazka na inny, dotychczasowy zostaje na serwerze zastąpiony nowym, który ma tę samą nazwę.
Po powrocie na stronę, która te obrazki wyświetla, przeglądarka nie zauważa, że cokolwiek się zmnieniło i wyświetla stan sprzed zmiany obrazka - nazwa pliku (ta sama) wskazuje na plik, który ma już w cache'u więc pobiera go stamtąd, a to jest stary obrazek, który był przed zmianą. Ręczne odświeżenie strony powoduje poprawne wyświetlenie aktualnego obrazka z serwera.
Moim problemem jest programowe zmuszenie przeglądarki do wykonania jednej prostej operacji odświeżenia strony jak Ctrl-R w firefoxie.
Różne próby w java script (które podejmowałem po omacku bo nie znam javy) powodują albo ciągłe odświeżanie w pętli albo brak odświeżania (albo może odświeżanie z cacha) - w każdym razie bez efektów.
Robię tak:
Po zmianie zdjęcia przekazuję phpem parametr w $_GET. Na stronie wyświetlającej obrazki sprawdzam (w php) istnienie tego parametru w $_GET i jeśli jest, wysyłam do przeglądarki kod java-script, którym usiłuję odświezyć stronę oraz kasuję parametr kontrolny z $_GET (aby odświeżać tylko raz). Nie wiem jak ma wyglądać ten kod java. Kod jak niżej nie daje efektu.
  1. if (isset($_GET['reload']))
  2. {
  3. echo '<script type="text/javascript">onload=document.location.reload(true);)</script>';
  4. unset($_GET['reload']);
  5. };


Nie chcę przy zmianie obrazka zmieniac jego nazwy dodając losowy ciąg znaków aby nazwa była inna niż w cache'u.
Nie mogę użyć odświeżania po krótkim czasie w sekcji meta html bo całość mam zorganizowaną w postaci niezmiennego szkieletu, w który php wkleja mi dynamicznie tylko kod każdej podstrony pomiędzy <div></div> a nie generuje całości.
Na stronach mam sporo niezmiennej grafiki, która ma być z cache'a więc chcę odświeżać z serwera jak najmniej - tylko warunkowo konkretną podstronę a wręcz konkretny obrazek jakby się tak dało.

Z góry dziękuję za pomoc
Bart


Go to the top of the page
+Quote Post
thek
post 16.03.2011, 09:35:02
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Niestety to wina przeglądarki, bo to ona w takim wypadku decyduje co zrobić. Można ją przymuszać na kilka sposobów:
1. w htaccess ustawiać, żeby miały określone rozszerzenia plików niewielki okres cache'owania
2. dodawać w nazwie pliku losowe wartości, które nie wpływają na wyświetlenie, a są widziane przez przeglądarkę jako coś nowego. O co chodzi? Dodawaj do nazwy obrazka parametry.
czyli obrazek.jpg?czas=ZMIENNA, gdzie ZMIENNA jest wartością losową. W ten sposób przeglądarka będzie cały czas uważać, że ma do czynienia z nowym obrazkiem.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
BartT
post 16.03.2011, 13:02:37
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.06.2004

Ostrzeżenie: (0%)
-----


Hmm..., czyli mówisz, że java mi tu na nic i że wystarczy tylko zmodyfikować w html
z:
  1. <img src="sciezka/nazwa.jpg>

na:
  1. <img src="sciezka/nazwa.jpg?parametr=cokolwiek_losowego>

nie zmieniając nazwy plików ani w ogóle nie robiąc nic innego??

Zrobiłem sobie wobec tego:
  1. echo '<img src="./photos/'.$nazwa.'.jpg?forgetcache='.time().'">';

i... wygląda że działa :-)
choć nie jestem już pewien bo nie wiem czemu wcześniej też miewałem efekty pozytywne a innym razem znowu przeglądarka ciągnęła z cache'a - nie wiem od czego to zależało...
Czy ja Cię dobrze zrozumiałem, że to takie proste? ;-)

Pozdrowienia
Bart

Ten post edytował BartT 16.03.2011, 13:07:02
Go to the top of the page
+Quote Post
thek
post 16.03.2011, 13:16:20
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Dobrze zrozumiałeś... To takie proste jak napisałeś. W ten sposób postępuje się nie tylko z obrazkami, ale i plikami CSS lub JS, które czasem się zmieniają ale nie zawsze odświeżają bo też występuje problem nazwy tej samej. Można jako parametr wtedy dać datę modyfikacji pliku. Jeśli przeglądarka wykryje że są różne... Zassa nową wersję. Jeśli nie - zostawi starą.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
BartT
post 16.03.2011, 13:19:43
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 14.06.2004

Ostrzeżenie: (0%)
-----


Wobec tego serdeczne dzięki, znowu się czegoś nauczyłem
Pozdrowienia
Bart
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 5.07.2025 - 19:06