Add to Google Reader or Homepage Prihlásiť sa k odberu RSS

| Rubrika Php / mysql

Diskusia k článku

Cachovanie s pomocou funkcií serialize/unserializeZobraziť článok

camo
Dátum a čas 19. 03. 2011, 16:21 E-mail 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äť naspäť

Pridať komentár

Koľko je na ruke prstov?

Náhľad článku

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 5433c02e9c80d­27a912f719724156162­.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.

RSS