Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [caching] PHP headers dla obrazka
Forum PHP.pl > Forum > PHP
CzarnyGsm
Witam,

Mam problem, aby przeglądarka cache'owała mi obrazek, które znajduje się pod adresem adresik.pl/obrazek/id/243/icon.png i w rzeczywistości jest generowany z pobranej wcześniej wartości binarnej.
Obrazek się wyświetla, ale po każdym odświeżeniu obrazek jest ładowany od nowa przez przeglądarkę. W firebug'u w zakładce 'Sieć' cały czas mam odpowiedź 200 i 'no cache'. Próbowałem dodawać w php dla tego adresu nagłówki z cachowaniem i nic. Reszta obrazków, które są ładowane na stronie, ale są docelowo na serwerze są cache'owane przez przeglądarkę.
Mógłby ktoś doradzić? Jakie konkretne nagłówki mam dać aby zadziałało cache'owanie w tym przypadku?

Z góry dziękuję za pomoc.

Pozdrawiam
bigZbig
Po pierwsze zadaj sobie pytanie czy problem z buforowaniem dotyczy tylko tego jednego obrazka?. Po drugie upewnij się, czy ręczne odświeżanie w twojej przeglądarce przypadkowo nie resetuje zawsze cache-a. Wywoływanie na nowo tego samego adresu to nie to samo co ręczne odświerzenie strony.

Zauważ, że buforowanie jest opcją domyślną więc jeśli coś nie jest cache-owane to zwykle jest to wymuszane ręcznie lub stosownymi nagłówkami takimi jak:

  1. header("Pragma: no-cache");
  2. header("Cache-Control: max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
  3. header("Expires: 0");


lub też metatagami

  1. <meta http-equiv="Expires" content="0" />
  2. <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate" />
  3. <meta http-equiv="Cache-Control" content="post-check=0, pre-check=0" />
  4. <meta http-equiv="Pragma" content="no-cache" />


Dodatkowo do sterowania cache-m przeglądarki służą nagłówki ETag.
MatKus
W teorii oprócz informacji o rodzaju pliku powinno wystarczyć coś takiego:
  1. header("Cache-Control: no-cache, must-revalidate");
  2. header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // lub dowolna inna data z przeszłości.


Z doświadczenia jednak wiem, że wszelkie nagłówki są tylko podpowiedziami dla przeglądarki, które ta czasem olewa. Szczególnie często miewałem tu problem z chromem (który moim zdaniem obecnie jest bardziej wkurzającą przeglądarką, niż IE). Chrome niezależnie, jakie by nagłówki dostał, to i tak wiedział lepiej, czego ja chcę i mi cache'ował obrazki i javascripty.

Jedynym rozwiązaniem, jakie znam i uważam za skuteczne jest generowanie za każdym razem innego adresu, np.
<img src="adresik.pl/obrazek/id/243/icon.png?rand=1248293481247"> albo <img src="adresik.pl/obrazek/id/243/1248293481247/icon.png">
przy czym ten ciąg po ?rand= jest oczywiście losowany za każdym razem.

To drugie rozwiązanie jest moim zdaniem lepsze, bo to pierwsze np. fora lubią blokować, a i niektóre skrypty JS sobie z tym nie radzą, bo np. rozszerzenie pliku widzą wtedy jako ".png?rand=1248293481247" i np. nie chcą z tego zrobić galerii.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.