Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ola pessoal, eu achei uma classe para cache, mas como faço para cachear somente parte de uma pagina??
Por favotr me ajudem
Classe:
<?php
/*
Criado por: Antonio Campos
Modificada por: Diogo Moreira
CHANGELOG
04-01-2008 -> Criação
20-02-2008 -> adicionado o parametro do caminho do arquivo de cache para o construtor, para prever arquivos em niveis diferentes
-> adicionado o tempo do cache em segundos
-> adicionada função para limpar o buffer de saída, para não guardar lixo no arquivo de cache
-> Segundo release!
*/
class Cache{
function Cache($diretorio_cache = "./cache/"){
//Diretório onde queremos guardar os arquivos de cache
$this->directorio_cache = $diretorio_cache; //Agora vamos começar a contruir uma string que irá conter o nome do script que vamos fazer cache
$this->pagina = $_SERVER['SCRIPT_NAME']."?";
//se existir uma query string vamos concatenar a mesma com o nome do arquivo
if (isset($_SERVER['QUERY_STRING'])){
$this->pagina=$this->pagina.$_SERVER['QUERY_STRING'];
}
}
function Inicio($tpo_cache = 600){ //equivalente a 10 minutos
//Gerar o nome do arquivo de cache correspondente à página que estamos
//O MD5 é só para evitar que o nome contenha careteres inválidos por exemplo ? e & comuns nas query strings
//coloquei a extensão html podem colocar o que quiserem
//limpa o buffer de saída antes de começar a execução
ob_clean();
$this->ficheiro_cache = $this->directorio_cache . md5($this->pagina) . '.html';
//Verificar se o ficheiro já existe na cache
if (file_exists($this->ficheiro_cache)){
if((time() - $tpo_cache) < filemtime($this->ficheiro_cache)){
//se já existir e não for antigo geramos o output deste arquivo
readfile($this->ficheiro_cache);
//como já fizemos output não queremos que mais nada seja executado!
exit();
}
unlink($this->ficheiro_cache);
}
//se chegar aqui é porque o arquivo não existia em cache e temos que o criar
//esta função cria um buffer onde é colocado o outup que é igualmente enviado ao cliente
ob_start();
}
function Fim(){
// Como não exise o arquivo no cache vamos cria-lo e abrir em modo w (w de write)
$fp = fopen($this->ficheiro_cache, 'w');
//Escrevemos o conteudo do buffer no novo ficheiro de cache
@fwrite($fp, ob_get_contents());
//escreve a data e hora do cache, apenas para controle
$hora = date('h:i:s, j-m-Y');
@fwrite($fp, "<!– Cache - $this->pagina - $hora –>");
//fechamos o file pointer
@fclose($fp);
//e fechamos tambem o buffer criado
ob_end_flush();
}
function Limpar(){
//ATENÇÃO: Este método apaga TODO o cache. Por isso, seu diretório onde ficam guardados os arquivos de
//cache não deve conter nenhum outro tipo de dado. Esta função será aprimorada para apagar somente o
//cache de determinada página
//criamos um apontador para o diretorio onde esta guardado o cache
if ($handle = $this->directorio_cache){
//um loop que percorre todos os ficheiros
while (false !== ($file = readdir($handle))){
//evitar um erro!!
if ($file != '.' and $file != '..'){
//somente uma informação
echo 'Apagado > '.$file . '<br>';
//apagar cada um dos arquivos
unlink($this->directorio_cache . '/' . $file);
}
}
//fechamos o apontador
closedir($handle);
}
}
}
?>
como usar:
//incluir o ficheiro onde temos a classe
include_once "cache.php";
$cache = new Cache();?>
<html>
<head>
<title>Exemplo de Cache em Php</title>
</head>
<body>
<h1>Conteudo da pagina2</h1>
</body>
</html>
<?php$cache->Fim();
?>Carregando comentários...