O webu
Cacheování obsahu z cizí stránky

Když potřebujeme stáhnout obsah z cizí URL (mimo náš web), jedná se většinou o časově náročnější operaci. Je sice možné nastavit časový limit, ale stejně je lepší výsledek cacheovat, je-li to možné a nepotřebujeme skutečně co nejnovější data.

Požadavek na získání cizí stránky

Cílem je časově náročnou cizí stránku odbourat a použít místo toho cache na vlastním webu.

Postup

Jak na to? Obsah se bude stále získávat funkcí file_get_contents, ale zároveň se bude funkcí file_put_contents ukládat k nám na web.

Ukládání ale proběhne jen v případě, že:

  • kopie na našem webu ještě není vytvořená (funkce file_exist),
  • kopie (soubor cache) už je moc starý (porovná se stáří souboru – funkce filemtime)

V takovém případě (soubor na našem serveru neexistuje nebo je starý) se stáhne a uloží aktuální obsah, jinak se pouze zobrazí výsledek z cache, což bude rychlé.

Řešení

function ziskatSouborCache($url) {
  $platnost = 60 * 60; // 60 s * 60 min = 1 hodina
  $soubor = "cache/" . urlencode($url);

  if (
      file_exists($soubor) && 
      (filemtime($soubor) > time() - $platnost)
     ) {
    // vrátíme obsah z keše
    return file_get_contents($soubor);
  }
  else {
    // obsah se musí stáhnout z cizí URL
    $obsah = file_get_contents($url);
    if ($obsah) {
      // uložení obsahu do cache
      file_put_contents($soubor, $obsah);
    }
    return $obsah;
  }
}

Použití je potom prosté:

echo ziskatSouborCache(
  "http://jecas.cz/ziskani-obsahu-cache"
);

A funkce ziskatSouborCache zařídí, jestli se soubor načte z cizí URL nebo z našeho serveru.

Pro funkčnost výše uvedeného skriptu je nutné vytvořit adresář cache, jinak pokus o uložení souboru skončí chybou.