Advertisement
Guest User

Untitled

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