Scripts

PHP Cachingsclasse

Benodigdheden: 1 directory met read & write access (standaard "cache"). Deze directory kan aangepast worden door de classe zo op te roepen: $cache = new cache('DIRECTORY'); PHP 5 (however, met kleine aanpassingen werkt het ook met PHP4, enkel de public, private en protected dingen weghalen!) Als 'cache' een goede dir is, kan je de classe gewoon aanroepen: $cache = new cache(); De classe werkt eigenlijk redelijk automatisch. Vanaf het bestand /FILE.cache bestaat, zal hij het uitlezen en de pagina sluiten. Anders zal de classe alle output opnemen, en deze uiteindelijk naar /FILE.class wegschrijven, zodat deze volgende keer uitgelezen kan worden. Als de output bewerkt is (bvb nieuwe forumreactie), verwijder je -bij de update van de database- gewoon het desbetreffende .cache-bestand! Oproepen met: $cache = new cache('CACHE DIRECTORY'); Voorbeeldje: Voorbeeldje met templatepower: (mijn index.php) Een bestand verwijderen kan met: $cache->deleteCache('index'); //index staat voor de filename natuulrijk Dit is eigenlijk gewoon een alias voor de (php) functie UNLINK, maar unlink is redelijk onbekend imo Het script kan natuurlijk uitgebreid worden naar je eigen wensen voor je eigen website, Plezier ermee!

php-cachingsclasse
<?php
class cache 
{
  // door Wim Mariƫn
  // http://www.gdx.be/
  
  
  
  // VARS                                                   /
  // directory with .cache files
  private $dir = './cache/';
  private $filename = NULL;
  
  protected $caching = false;
  
  
  // __construct                                             /  
  // PUBLIC (duh!)
  // cache::__construct()
  // AUTOMATIC
  public function __construct ($dir=NULL)
  {
    if(isset($dir))
      $this->dir = $dir;
      
    if(substr($this->dir, -1) != '/')
      $this->dir .= '/';
  }
  
  
  // __destruct                                             /  
  // PUBLIC (duh!)
  // cache::__destruct()
  // AUTOMATIC
  public function __destruct ()
  {
    $this->dir = NULL;
  }
  
  
  // start                                                  /
  // PUBLIC
  // cache::start([string] filename)
  public function start ($filename)
  {
    
    $this->filename = $filename;
    if(isset($filename) && !is_file($this->dir.$filename.'.cache'))
    {
      ob_start();
      $this->caching = true;
    }
    else
    {
      echo $this->readCache($filename);
      exit();
    }
  }
  
  
  // write                                                  /
  // PUBLIC
  // cache::write ([string] filename)
  public function write ($file='')
  {
    if(empty($file) && !empty($this->filename))
      $file = $this->filename;
    elseif(empty($file) && empty($this->filename))
      return false;
    
    if($this->caching)
    {
      $content = ob_get_contents();
      ob_end_clean();
      $this->updateCache($file, $content);
      return $content;
    }
  }
  
  
  // updateCache                                            /
  // PRIVATE
  // cache::updateCache ([string] filename, [string] content)
  // write a .cache file (by update)
  private function updateCache ($file, $content)
  {
    $cachefile = fopen($this->dir.$file.'.cache', 'w');
    fwrite($cachefile, $content);
    fclose($cachefile);
    return true;
  }
  
  
  // readCache                                              /
  // PUBLIC
  // cache::readCache([string] filename)
  // read a .cache file
  public function readCache($file)
  {
    $cachefile = fopen($this->dir.$file.'.cache', "r");
    
    while(!feof($cachefile))
    {
      $content .= fgets($cachefile, 4096);
    }
    fclose($cachefile);
    
    return $content;
  }

  // deleteCache
  // PUBLIC
  // cache::deleteCache([string] filename)
  // delete a .cache file
  public function deleteCache($file)
  {
    if(unlink($this->dir.$file.'.cache'))
      return true;
    else
      return false;
  }

}
?>

Reacties

0
Nog geen reacties.