Posts com a tag "PHP":

21/07/2010 - 14:23

Memcached

Eventualmente nos deparamos com alguma aplicação web, ou até mesmo site, que tenha seu conetúdo armazenado em uma base de dados, seja ela um banco de dados ou um xml ou até mesmo JSON. isso é muito interessante no ponto de vista de dinamismo, pois você pode ter um sistema de administração, atualizar de maneira mais rápida, porém isso pode acarretar um grande problema se sua aplicação(site) tiver muito acesso.  Isso pode criar um gargalo enorme na transferência dos dados e até mais travar seu servidor, uma vez que cada requisição de página é uma reuisição para o arquivo ou uma requisição para o banco de dados.

Para se evitar esse tipo de gargalo, é interessante utilizar algum mecanismo de cache para os dados. Um dos mais utilizados e mais fáceis de se usar (pelo menos em PHP) é o memcached.

O ruim desse mecanismo é que o servidor tem que disponibilizá-lo, não é uma coisa que você memo possa fazer em sua aplicação. Tirando isso, é muito bom.

Basicamente, você armazena os dados na memória do servidor o que porna a leitura muito mais rápida.

O memcached, permite que você armazene qualquer tipo de texto desde que em um array, ex. você não pode armazenar somente uma string, tem que armazenar um array que tenha essa string.

adicionar = “string”; X errado

adicionar = $array[0] = “string”;  Correto

No memcached você armazena em um local (chave) que você define, o conteúdo e por quanto tempo você quer que o conteúdo seja armazenado.

Como um banco de dados, você deve informar ao memcached o endereço de armazenamento, por padrão é localhost:11211, mas pode variar caso o rsponsável pelo servidor determine.

bom vamos a um exemplo

$mem = new Memcache;
$mem->addServer("localhost:11211");
$mem->set("chave01", $array, TRUE, 60);

No exemplo acima, eu estou armazenando na chave01 meu array por 60 segundos.

Agora para pegar esse conteúdo, você deve usar a função get. Vamos ao exemplo.

$mem = new Memcache;
$mem->addServer("localhost:11211");
$resp = $mem->get("chave01");
print_r($resp);

Nesse exemplo eu estou pegando o conteúdo da chave01 e armazenando na variável $resp.

Aqui abaixo, um exemplo de uma função que procura no memcached uma determinada query e se não acha busca no banco de dados, armazena no memcached e responde o conteúdo.

function mysql_queryCache($consulta, $tempo = 3600) {
     $chave = md5($consulta);  //Gera uma chave à partir de um hash formado pela query

     // Conecta no Memcached
     $mem = new Memcache;
     $mem->addServer("localhost:11211")

     // Tenta pegar o item em cache
     $query = $mem->get($chave);

     if ($query === false) {
          $query = mysql_query($consulta);
          if(mysql_num_rows($query) > 0){
               $itens_array = array();

               if(mysql_num_rows($query)){
                    while($item = mysql_fetch_array($query)){
                         $itens_array[] = $item;
                    }
               }
          }else{
               $itens_array[0] = "null";
               $itens_array[1] = "null";
          }
          $mem->set($chave, $itens_array, TRUE, $tempo);

     } else {
          $itens_array = $query;
     }

     return $itens_array;
}

print_r(mysql_queryCache("SELECT * FROM clientes", 60) );

essa função procura no memcached a query ‘SELECT * FROM clientes’, se não tiver faz a busca no banco de dados, armazena no memcached e retorna o conteúdo. Se a query retornar vazia,  responde null.

Basicamente é isso, espero que seja tão útil para voc~es como foi para mim.

Enviado por: leandro garcia - Categoria(s): cache, PHP Tags relacionadas: , , ,
03/12/2009 - 14:46

Trabalhando com datas em PHP

É apenas uma dica, que par muitos já deve ser velha, mas tenho certeza de que para muitos é uma novidade.

Estou planejando escrever este post com esta dica faz tempo, mas não havia me decidido pela forma com que eu escreveria. Acabei me decidino por uma maneira simples e  direta.

Durante muito tempo, sempre que eu precisava armazenar uma data na base de dados o fazia pela maneira em que nós, brasileiros, escrevemos, ou seja, 22/11/1984 (meu aniversário aliás, se quiser me dar um presente fiquem à vontade. rs), mas percebi que quando precisava comparar datas era um Deus nos acuda.

Lendo na Internet descobri que o mais interessante seria usar o formato Ano-mês-dia, ou seja meu aniversário ficaria 1984-11-22, uma maneira mais fácil de comparar datas e ordenar seus SELECTS.

Para escreve a data de hoje, ao invés de usar:

date('d/m/Y');

use

date('Y-m-d');

Você vai se surpreender como isso vai te ajudar.

Ah, aproveitando, se você precisar armazenar a data de atualização, use o formato datetime.

date('Y-m-d H:i:s');//1984-11-22 22:05:15

Vai aqui uma funçãozinha que eu fiz pra exibir a data no formato brasileiro à partir do formato acima.

function FormataData($date){

$dt = explode('"-",$date');

      return "{$dt[3]}/$dt[2]}/$dt[1]}";

}

Fica a dica.

Enviado por: leandro garcia - Categoria(s): dicas, PHP Tags relacionadas: , , ,
27/11/2008 - 22:56

PHP: Trabalhando com horários – Fuso

Recentemente, peguei um projeto para desenvolver, onde eu deveria trabalhar com horário. Até ai tudo bem, no entanto eu teria que trabalhar com o horário do servidor, aí veio o problema.

Costumo utilizar um servidor que fica localizado nos Estado Unidos e o Fuso horário diferente. O que fazer?

Uma vez que você aprende é fácil, mas demorei um pouquinho a descobrir.

O PHP tem uma função interna que faz isso pra a gente, só devemos setar o local pra o qual desejamos setar o fuso.

A função é date_default_timezone_set()

Como usá-la?

Basta colocá-la no inicio da página em que você vai trabalhar com horário.

date_default_timezone_set('Brazil/East');<!--–– São Paulo ––-->
?>

Mas Garcia, estou trabalhando para uma empresa que fica em Portugal o que fazer?

Simples, altere as propriedades.  Aqui tem a lista de todos os fusos.

Veja em funcionamento

Download

Enviado por: leandro garcia - Categoria(s): dicas, PHP Tags relacionadas: , , ,