phpRS help fórum : phpRS Fórum
Hlavní diskuzní phpRS fórum. Najdete zde odpovědi na otázky týkající se provozu a instalace phpRS systému.
phpRS - redakční a informační systém
Kešování obsahu pluginu
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2011-01-07, 18:30

Zdravím všechny,

řeším teď takovou záležitost. Abych snížil počet dotazů na databázi, chtěl bych kešovat obsah pluginu tak, aby se mi po každé zobrazené stránce neustále dotazoval do databáze. Vás bych se chtěl zeptat na Váš názor, zda-li si myslíte, že je to dobrá cesta, zda to má smysl a nakolik je můj způsob bezpečný (jelikož moc nechápu obranu proti sql injection apod.) a v případě, že ne, tak jak to zabezpečit.

Díky za Vaše názory.

POPIS:
Mám typický plugin.

výkonný soubor s fcí do které se načítá obsah zdrojové stránky, kde je například pouze výstup, který běžně obstarával původní plugin a jehož výsledek se jednou za čas dle nastavení načte do složky cache.


function BlokiAktuality($url='',$ttl = 5 )
{
$cesta='cesta k souboru';
$urlnourl='obsah pole při nenačtení adresy zdroje';
$url = ''.$cesta.'blok-i-aktuality-o.php';
// vychozi priznak
$cached = true;
// nenalezen soubor nebo probehl expiraci
if (!is_file("'.$cesta.'cache/" . md5($url)) || time() - filemtime("'.$cesta.'cache/" . md5($url)) > $ttl)
$cached = false;
// neni kesovano
if (!$cached)
{
// debug
//echo "znovu parsujeme tabulku - " . date('d.m.Y H:i:s');
$f = file_get_contents($url);
if (!$f)
{
echo ''.$urlnourl.'';
return;
}

$vysledek = $f;


// ulozime
file_put_contents("'.$cesta.'cache/".md5($url), $vysledek);
}

// nacteme tabulku
$vysledek = file_get_contents("'.$cesta.'cache/".md5($url));

$blokiaktuality=''.iconv("", "utf-8", $vysledek).'';
// zobrazeni menu
switch ($GLOBALS["vzhledwebu"]->AktBlokTyp()):
case 1: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$blokiaktuality); break;
case 2: Blok2($GLOBALS["vzhledwebu"]->AktBlokNazev(),$blokiaktuality); break;
case 3: Blok3($GLOBALS["vzhledwebu"]->AktBlokNazev(),$blokiaktuality); break;
case 4: Blok4($GLOBALS["vzhledwebu"]->AktBlokNazev(),$blokiaktuality); break;
case 5: Blok5($GLOBALS["vzhledwebu"]->AktBlokNazev(),$blokiaktuality); break;
default: Blok1($GLOBALS["vzhledwebu"]->AktBlokNazev(),$blokiaktuality); break;
endswitch;

}

LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce

Re: Kešování obsahu pluginu
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2011-01-07, 18:43

Určite je to dobrá cesta, cachovat treba, hlavne zložité volania do databázky. Osobne cachujem napríklad externe načítavané údaje z iných domén, kde nie je záruka, že obsah bude načítaný rýchlo. Vytvorím si adresár a do neho umiestnim súbor, napríklad cache.dat . Podľa dátumu vytvorenia súboru potom rozhodujem, či obsah vygenerujem z dabazázy alebo pouzijem obsah cache. Pri vytváraní súboru treba dať pozor na atomicitu. Robím to takto:
$tmp_file = $cache_file.'.'.uniqid().'.tmp';
file_put_contents($tmp_file, $block_content);
rename($tmp_file, $cache_file);



Lituji, ale pouze registrovaní uživatelé mohou zasílat příspěvky do této sekce.
This forum powered by Phorum and designed by STaNBoSS.