| Rubrika Php / mysql
Diskusia k článku
Cachovanie s pomocou funkcií serialize/unserialize
camo
19. 03. 2011, 16:21
camo [a] tym.sk
Je mi jasné, že článok je už dosť starý ale možno mi niekto odpovie...
Prečo je v scripte použitá fcia file a nie file_get_contents?
naspäť
Pridať komentár
Cachovanie s pomocou funkcií serialize/unserialize
Cachovanie výstupu SQL dotazu môže byť rôzne. Už som spomínal
cachovanie celých kusov stránky do HTML súboru, teraz načrtnem ako môže
vyzerať cachovanie za pomoci PHP funkcií serialize a
unserialize. Zjednodušene povedané, funkcia
serialize dokáže pretransformovať premennú – pole – do
takej podoby, aby bola uložiteľná do externého súboru a zároveň znovu
použiteľná v podobe rovnakého poľa. V praxi to vyzerá asi takto.
$query="SELECT id FROM tabulka LIMIT 1"; $hash = md5($query);
Pomocou funkcie md5 vytvorím hash zadaného sql dotazu – nech je
akýkoľvek.
Cachovanie je založené na pravidle, že každý SQL dotaz je uložený do
súboru s názvom obsahujúcim tento vytvorený hash. Cache súbor sa teda bude
volať napríklad 5433c02e9c80d27a912f719724156162.txt.
if(file_exists($hash)) { $fromCache = unserialize(implode('',file($hash))); }
Pred samotným vykonaním SQL dotazu overujem, či náhodou neexistuje
zacachovaný súbor. Pokiaľ áno, tak do premennej $fromCache
pomocou funkcie unserialize vrátim predtým zacachovaný výstup
SQL dotazu.
if(!file_exists($hash)) { $query = mysql_query($query); while ($row = mysql_fetch_assoc($query)) { $cache[] = $row; } $output = serialize($cache); $fp = fopen($cacheFile,"w"); fputs($fp, $output); fclose($fp); }
Pokiaľ cachovací súbor neexistuje, vykonám SQL dotaz štandardným
spôsobom, výstup uložím do premennej $cache a „zakódujem“
funkciou serialize. Premennú potom stačí uložiť do
súboru.

