Artigos & Ideias

[PHP] Funções de Cache e Obter Conteúdo

Escrito por:

Uma forma de aumentar a rapidez do teu site de forma exponencial é com recurso a cache de pedidos remotos e internos.
Porquê fazer a mesma solicitação à Base de Dado a cada vez que a página é carregada se a mesma raramente muda?
Criei uma função que verifica se há novos conteúdos na cache e retorna o conteúdo de uma fonte se novos conteúdos não estiverem disponíveis.

A Função PHP

/* obtem o conteudo de um ficheiro se ele existir, caso contrário coloca em cache */
function obter_conteudo($ficheiro,$link,$horas = 24,$fn = '',$fn_args = '')
{
	//variáveis
	$hora_actual = time(); $hora_expira = $horas * 60 * 60; $hora_ficheiro = filemtime($ficheiro);
	//decisões
	if(file_exists($ficheiro) && ($hora_actual - $hora_expira < $hora_ficheiro)) {
		//echo 'retorna a cache do ficheiro';
		return file_get_contents($ficheiro);
	}
	else
	{
		$conteudo = obter_link($link);
		if($fn){ $conteudo = $fn($conteudo,$fn_args); }
		$conteudo.= '<!-- cached:  '.time().'-->';
		file_put_contents($ficheiro,$conteudo);
		//echo 'retorna o novo conteudo de '.$link.':: '.$conteudo;
		return $conteudo;
	}
}

/* obtem o conteudo do link com recurso a curl */
function obter_link($link)
{
	$ch = curl_init();
	curl_setopt($ch,CURLOPT_URL,$link);
	curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
	$conteudo = curl_exec($ch);
	curl_close($ch);
	return $conteudo;
}

A minha função obter_conteudo aceita quatro argumentos:

  1. O ficheiro para obter o conteúdo. Se esse ficheiro não existir, o ficheiro é criado e com esse mesmo conteúdo.
  2. O LINK do qual vamos obter o conteúdo se o conteúdo que estiver em cache não for recente.
  3. O nome da função para passar o conteúdo recente.
  4. Os argumentos a passar para o terceiro argumento da função

A função é, naturalmente, muito “primitiva”.
Porém eu gosto da minha função porque ela tanto trata da recuperação e do armazenamento em cache para que eu não precise de repetir o código sempre que queira colocar conteúdo em cache.

Existem muitas (e mais avançadas) classes em PHP para manipulação de cache disponíveis, mas a minha função acima abrange a maior parte das minhas necessidades.

Espero que também te ajude!

4


Sobre o Autor

Carlos Gonçalves é um Freelancer com bastante experiência em linguagens de programação e webdesign. Vocacionado para as novas tecnologias, aposta na qualidade dos serviços, atendimento rápido e sempre disponível para melhor satisfazer os seus clientes. Autor do site cgoncalves.com

Comentários

  1. Ricardo  2 Março 2010

    interessante, poderia demostrar o funcionamento com um exemplo?

    abraço

    (responder)
  2. Felipe  4 Agosto 2010

    Olá carlos.
    Estou precisando de um programador em PHP que entenda de curl.
    Está disposto a aceitar o desenvolvimento de uma pequena classe com a tecnologia?
    Escreva-me um email para passar mais detalhes.
    Abraços.

    (responder)

Comentar

Nota: A moderação de comentários está activada e pode atrasar o teu comentário. Não há necessidade de reenviares o teu comentário.

  1. Carlos Gonçalves  Janeiro 9, 2010
More in Outros (1 of 12 articles)

# #