Cooler_

cache schema

Sep 19th, 2012
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.87 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * class cache
  5.  *
  6.  */
  7. class Cache {
  8.  
  9.     /**
  10.      * Tempo padrão de cache
  11.      *
  12.      * @var string
  13.      */
  14.     private static $time = '5 minutes';
  15.    
  16.     /**
  17.      * Local onde o cache será salvo
  18.      *
  19.      * Definido pelo construtor
  20.      *
  21.      * @var string
  22.      */
  23.     private $folder;
  24.  
  25.     /**
  26.      * Construtor
  27.      *
  28.      * Inicializa a classe e permite a definição de onde os arquivos
  29.      * serão salvos. Se o parâmetro $folder for ignorado o local dos
  30.      * arquivos temporários do sistema operacional será usado
  31.      *
  32.      * @uses Cache::setFolder() Para definir o local dos arquivos de cache
  33.      *
  34.      * @param string $folder Local para salvar os arquivos de cache (opcional)
  35.      *
  36.      * @return void
  37.      */
  38.     public function __construct($folder = null) {
  39.         $this->setFolder(!is_null($folder) ? $folder : sys_get_temp_dir());
  40.     }
  41.    
  42.     /**
  43.      * Define onde os arquivos de cache serão salvos
  44.      *
  45.      * Irá verificar se a pasta existe e pode ser escrita, caso contrário
  46.      * uma mensagem de erro será exibida
  47.      *
  48.      * @param string $folder Local para salvar os arquivos de cache (opcional)
  49.      *
  50.      * @return void
  51.      */
  52.     protected function setFolder($folder) {
  53.         // Se a pasta existir, for uma pasta e puder ser escrita
  54.         if (file_exists($folder) && is_dir($folder) && is_writable($folder)) {
  55.             $this->folder = $folder;
  56.         } else {
  57.             trigger_error('Não foi possível acessar a pasta de cache', E_USER_ERROR);
  58.         }
  59.     }
  60.    
  61.     /**
  62.      * Gera o local do arquivo de cache baseado na chave passada
  63.      *
  64.      * @param string $key Uma chave para identificar o arquivo
  65.      *
  66.      * @return string Local do arquivo de cache
  67.      */
  68.     protected function generateFileLocation($key) {
  69.         return $this->folder . DIRECTORY_SEPARATOR . sha1($key) . '.tmp';
  70.     }
  71.    
  72.     /**
  73.      * Cria um arquivo de cache
  74.      *
  75.      * @uses Cache::generateFileLocation() para gerar o local do arquivo de cache
  76.      *
  77.      * @param string $key Uma chave para identificar o arquivo
  78.      * @param string $content Conteúdo do arquivo de cache
  79.      *
  80.      * @return boolean Se o arquivo foi criado
  81.      */
  82.     protected function createCacheFile($key, $content) {
  83.         // Gera o nome do arquivo
  84.         $filename = $this->generateFileLocation($key);
  85.        
  86.         // Cria o arquivo com o conteúdo
  87.         return file_put_contents($filename, $content)
  88.             OR trigger_error('Não foi possível criar o arquivo de cache', E_USER_ERROR);
  89.     }
  90.    
  91.     /**
  92.      * Salva um valor no cache
  93.      *
  94.      * @uses Cache::createCacheFile() para criar o arquivo com o cache
  95.      *
  96.      * @param string $key Uma chave para identificar o valor cacheado
  97.      * @param mixed $content Conteúdo/variável a ser salvo(a) no cache
  98.      * @param string $time Quanto tempo até o cache expirar (opcional)
  99.      *
  100.      * @return boolean Se o cache foi salvo
  101.      */
  102.     public function save($key, $content, $time = null) {
  103.         $time = strtotime(!is_null($time) ? $time : self::$time);
  104.            
  105.         $content = serialize(array(
  106.             'expires' => $time,
  107.             'content' => $content));
  108.        
  109.         return $this->createCacheFile($key, $content);
  110.     }
  111.    
  112.    
  113.     /**
  114.      * Salva um valor do cache
  115.      *
  116.      * @uses Cache::generateFileLocation() para gerar o local do arquivo de cache
  117.      *
  118.      * @param string $key Uma chave para identificar o valor cacheado
  119.      *
  120.      * @return mixed Se o cache foi encontrado retorna o seu valor, caso contrário retorna NULL
  121.      */
  122.     public function read($key) {
  123.         $filename = $this->generateFileLocation($key);
  124.         if (file_exists($filename) && is_readable($filename)) {
  125.             $cache = unserialize(file_get_contents($filename));
  126.             if ($cache['expires'] > time()) {
  127.                 return $cache['content'];
  128.             } else {
  129.                 unlink($filename);
  130.             }
  131.         }
  132.         return null;
  133.     }
  134. }
  135. /*
  136. exemplo
  137. $cache = new Cache();
  138. $frase = $cache->read('frase-dia');
  139. if (!$frase) {
  140.     // Cria uma nova frase e salva-a no cache por 30s
  141.     $frase = 'CALMA! O sábio jamais se aborrece ('. date('H:i:s') .')';
  142.     $cache->save('frase-dia', $frase, '30 seconds');
  143. }
  144. echo "<p>{$frase}</p>";
  145.  
  146.  
  147.  
  148. */
  149. ?>
Advertisement
Add Comment
Please, Sign In to add comment