Własny Etag, czyli cachowanie zdjęcia pobieranego z bazy danych ;): Różnice pomiędzy wersjami
Przejdź do nawigacji
Przejdź do wyszukiwania
m (Zastępowanie tekstu - "<source lang="php">" na "<pre>") |
|||
Linia 10: | Linia 10: | ||
Krokiem pierwszym jest ustalenie nagłówku cachowania na public. | Krokiem pierwszym jest ustalenie nagłówku cachowania na public. | ||
< | <pre> | ||
header("Cache-Control: public"); | header("Cache-Control: public"); | ||
</source> | </source> | ||
Linia 18: | Linia 18: | ||
Jeżeli nie, wrzucenie domyślnego obrazka informującego o braku zdjęcia. | Jeżeli nie, wrzucenie domyślnego obrazka informującego o braku zdjęcia. | ||
< | <pre> | ||
$file='/var/www/virtual/xxx/nophoto.png'; | $file='/var/www/virtual/xxx/nophoto.png'; | ||
$last_modified_time = filemtime($file); | $last_modified_time = filemtime($file); | ||
Linia 36: | Linia 36: | ||
Kolejnym przypadkiem jest sytuacja GDY zdjęcie w bazie danych ISTNIEJE! | Kolejnym przypadkiem jest sytuacja GDY zdjęcie w bazie danych ISTNIEJE! | ||
< | <pre> | ||
$etag = md5(funkcja_pobierajaca_date_modyfikacji_z_bazy_danych($id)); | $etag = md5(funkcja_pobierajaca_date_modyfikacji_z_bazy_danych($id)); | ||
Wersja z 17:23, 15 lut 2018
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.
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.$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!$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 ;)