Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luis Paullo

cache simples

Recommended Posts

Bom segue ai um sistema para pegar conteudo do DB e salvar em um arquivo estatico um cache no servidor!!!

 

Tmb quero sugestões sobre esse script se realmente ele alivia alguma coisa =X

 

<?php

class Cache{

   protected $folter;
   protected $timeout;
   protected static $content;
   protected $ext;

   public function __construct($timeout=60, $folter='cache', $ext='txt') {

       $this->timeout = $timeout;
       $this->folter = $folter;
       $this->ext = $ext;
   }

   public function getPathFileName($key) {
       return sprintf('%s/%s.%s', $this->folter, md5($key), $this->ext);
   }

   private function exist($filename) {
       return file_exists($filename);
   }

   public function isCache($key) {
       $filename = $this->getPathFileName($key);

       if (!$this->exist($filename)) {
           return true;
       }
       $filetime = filemtime($filename);

       if (time() > $filetime + ( 60 * $this->timeout )) {
           return true;
       }
       return false;
   }

   public function cacheOutputtoFile() {

       self::$content = strtr(ob_get_contents(), 
                               array("\t" => '', "\n" => '', "\r" => ''));
       return ob_end_clean();
   }

   public function write($key) {
       $filename = $this->getPathFileName($key);

       if (!file_put_contents($filename, self::$content)) {
           throw new Exception('Não foi possivel gravar no Arquivo ' . $key);
       }
   }

   public function read($key) {
       $filename = $this->getPathFileName($key);

       if ($this->exist($filename)) {
           if (!$result = file_get_contents($filename)) {
               throw new Exception('Não foi possivel Ler Arquivo ' . $key);
           }
           return $result;
       }
   }
}

 

Usando :

 


try {

$result = mysql_query("SELECT * FROM Persons");// seu select

$data = mysql_fetch_assoc($result);

   ob_start();// armazenando os dados no buffer (Resultado do foreach)

   $cache = new Cache(60, 'cache', 'html');// tempo, Pasta, formato do arquivo

// ('cache') faz referencia ao nome do arquivo criado-- pode ser uma variavel dinamica
   if ($cache->isCache('cache')) { 

       echo '<div id="main_text">';

           foreach ($data as $texto) {

               echo $texto['textNoticia'], '....';// conteudo do DB
           }
       }
       echo '</div>';

       $cache->cacheOutputtoFile();// exibindo os dados do buffer

       $cache->write('cache');// escrevendo dados
   }

   echo $cache->read('cache'); //exibindo conteudo do arquivo

} catch (Exception $e) {
   $content = 'Error: ' . $e->getMessage();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

a minha pergunta, para te responder se isso "alivia" ou não é:

 

com qual periodicidade você gera o arquivo estático:

-> cada vez que alguém acessa ?

-> ou somente qndo algo muda no db ?

 

 

 

Pretendo fazer algo desse tipo também, mas para o sistema completo, gerando dentro da minha pasta cache, o .html com DTD e tudo mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qndo alguem acessa ele verifica o tempo do arquivo ..

 

ta pra 60 minutos.. mais o tempo posso mudar conforme me for necessário =P

 

ele verifica a data do arquivo c for menor que a data atual ele consulta no DB e grava os dados novamente..

se não for ele somente le o arquivo ...

 

mais caso você atualiza o DB você tem que apaga os arquivo do cache, pra ele grava a materia atualizada de novo =P

Compartilhar este post


Link para o post
Compartilhar em outros sites

bacana cara.. eu vi por cima o código.

 

tá uma boa saída sim.

Imaginem que tenhamos 100 clientes dentro dessa 1 hora.

 

você acessou o banco 1 unica vez, e exibiu para 100 clientes.

Sem isso, você teria acessado 100 vezes o banco.

 

parabéns.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.