Własny Etag, czyli cachowanie zdjęcia pobieranego z bazy danych ;): Różnice pomiędzy wersjami

Z Podręcznik Administratora by OPZ SGU
Przejdź do nawigacji Przejdź do wyszukiwania
(Utworzył nową stronę „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…”)
 
Linia 10: Linia 10:
Krokiem pierwszym jest ustalenie nagłówku cachowania na public.
Krokiem pierwszym jest ustalenie nagłówku cachowania na public.


<pre>
<source lang="php">
header("Cache-Control: public");
header("Cache-Control: public");
</pre>
</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>
<source lang="php">
$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 31: Linia 31:
     header("HTTP/1.1 304 Not Modified");
     header("HTTP/1.1 304 Not Modified");
     exit;
     exit;
</pre>
</source>




Kolejnym przypadkiem jest sytuacja GDY zdjęcie w bazie danych ISTNIEJE!
Kolejnym przypadkiem jest sytuacja GDY zdjęcie w bazie danych ISTNIEJE!


<pre>
<source lang="php">
$etag = md5(funkcja_pobierajaca_date_modyfikacji_z_bazy_danych($id));
$etag = md5(funkcja_pobierajaca_date_modyfikacji_z_bazy_danych($id));


Linia 45: Linia 45:
     exit;
     exit;
}
}
</pre>
</source>




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  ;)

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  ;)