Własny Etag, czyli cachowanie zdjęcia pobieranego z bazy danych ;): Różnice pomiędzy wersjami
Linia 50: | Linia 50: | ||
W zasadzie to by było tyle... | W zasadzie to by było tyle... | ||
Nic odkrywczego, ale może komuś naświetli ocb z Etag oraz Last-Modified ;) | Nic odkrywczego, ale może komuś naświetli ocb z Etag oraz Last-Modified ;) | ||
[[Category:PHP]] |
Wersja z 02:30, 13 lip 2010
Jakiś czas temu na potrzeby pewnego serwisu musiałem zrobić szybki system cachowania zdjęć które były zapisywane w bazie danych.
Obecnie kod ten nie jest już używany, więc mogę go swobodnie opublikować.
Zastąpiła go nowa, o niebo wydajniejsza metoda.
Ale udostępniam dla potomności, być może komuś przyda się, lub rozjaśni kwestie cachowania plików dynamicznych.
Krokiem pierwszym jest ustalenie nagłówku cachowania na public.
<source lang="php"> header("Cache-Control: public"); </source>
Drugim krokiem, jest sprawdzenie czy zdjęcie które miało być wczytane z bazy danych, istnieje.
Jeżeli nie, wrzucenie domyślnego obrazka informującego o braku zdjęcia.
<source lang="php"> $file='/var/www/virtual/xxx/nophoto.png'; $last_modified_time = filemtime($file); $etag = md5_file($file);
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT");
header("Etag: $etag");
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $last_modified_time ||
trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) { header("HTTP/1.1 304 Not Modified"); exit;
</source>
Kolejnym przypadkiem jest sytuacja GDY zdjęcie w bazie danych ISTNIEJE!
<source lang="php"> $etag = md5(funkcja_pobierajaca_date_modyfikacji_z_bazy_danych($id));
header("Etag: $etag");
if (trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
header("HTTP/1.1 304 Not Modified"); exit;
} </source>
W zasadzie to by było tyle...
Nic odkrywczego, ale może komuś naświetli ocb z Etag oraz Last-Modified ;)