Laikinoji atmintinė su PHP
Ši svetainė šiuo metu yra generuojama visiškai dinamiškai, t.y. užduodama krūva SQL klausimų, paimamas šablonas ir pagal jį sukonstruojamas puslapis. Visa tai labai gerai, kai lankytojų skaičius nedidelis (o lankytojų skaičius čia nėra didelis – apie 100-150 unikalių lankytojų per parą. Tad sumąsčiau, kad reikėtų pasidaryti šiokią tokią laikinosios atmintinės (kešavimo) sistemą, ir bent jau RSS naujienų negeneruoti dinamiškai. Kol kas to nereikia ta prasme, kad serveris puikiai dar viską paveža (nors tą serverį sunkiai apsiverčia liežuvis serveriu vadint – mano skaičiavimo mašinėlė turbūt greitesnė yra), tačiau kaip visada šioje svetainėje viską darau tik eksperimentuodamas ;)
Kaip tik radau aprašymą kaip Simon Willison išspręndė laikinosios atminties problemą su labai paprastu PHP skriptu. Štai visas šis kodas:
<?php
$cachefile = 'cache/index-cached.html';
$cachetime = 5 * 60;
// Jei atmintyje esantis puslapis yra jaunesnis nei $cachetime, tai pateikiame jį iš atminties
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
include($cachefile);
echo "<!-- Kopija iš atminties, sugeneruota ".date('H:i', filemtime($cachefile))." -->\n";
exit;
}
ob_start(); // Įjungiame išvedimo buferį
/* Čia įdedame kodą, kuris generuoja dinaminį puslapį */
// Įrašome visa tai kas sukaupta buferyje į atmintį (į bylą)
$fp = fopen($cachefile, 'w');
fwrite($fp, ob_get_contents());
fclose($fp);
ob_end_flush(); // Siunčiame išvedimo buferį naršyklei
?>