-2

Contador de Visitas Gráfico Utilizando GD

criado por Richard Lima em 28/04/2002 11:50pm
Utilizando os artigos "Instalando Apache + PHP em ambientes Windows" de Marcelo Rodrigo e retirando o ponto e vírgula do inicio da linha ;extension=php_gd.dll do PHP.INI, temos a biblioteca GD disponível. E, utilizando "Gerando Imagens Dinamicamente" de Luiz Gustavo Cardoso Ribeiro, temos uma boa idéia de como usar a GD.

O script pode ser melhorado e adicionado novas funções, isso fica a cargo de quem precisar usar. Espero ter contribuído com algo.

Primeiro, vamos criar um arquivo chamado counter.php:

counter.php
<?php
// se não informou cor de fundo, escolhe a cor
if (empty($bg)) {
    $bg = 1;
}
// se não informou cor da fonte, escolhe a cor
if (empty($fg)) {
    $fg = 2;
}
// se nao informou cor da borda, seta a mesma cor do fundo
if (empty($bc)) {
    $bc = $bg;
}

// como chegar ao conteúdo da variável CONTADOR, depende de
// que processo você irá utilizar: banco de dados, arquivo texto...
$contador = "0500321"; // Número de exemplo

// INFORMA AO BROWSER QUE TIPO DE IMAGEM SERÁ CRIADA
Header("Content-type: image/png");

// TAMANHO x E y DA FIGURA
$x = 47;
$y = 12;
// ESTILO DA FONTE default: 2 (não negrito)
$fonte = 2;
// SE QUISER NEGRITO (da fonte 2 para 3, cria uma idéia de negrito)
if (isset($ng)) {
    $fonte = 3;
    $x += 7; // aumenta o tamanho da imagem
}
// CRIA A IMAGEM
$img = imagecreate($x,$y);
// PALETA DE CORES
$branco = ImageColorAllocate($img,255,255,255);
$preto = ImageColorAllocate($img,0,0,0);
$verde = ImageColorAllocate($img,0,100,0);
$vermelho = ImageColorAllocate($img,255,0,0);
$azul = ImageColorAllocate($img,0,0,255);
$amarelo = ImageColorAllocate($img,255,255,0);
$corderosa = ImageColorAllocate($img,255,0,255);

// função para escolher a cor de cada estapa
// a paleta poderia logo ser criada dentro dela
function cor($var) {
    global $contador,$branco,$preto,$verde,$vermelho,$azul,$amarelo,$corderosa;
    switch($var) {
      case 1:
          return $branco;
          break;
      case 2:
          return $preto;
          break;
      case 3:
          return $verde;
          break;
      case 4:
          return $vermelho;
          break;
      case 5:
          return $azul;
          break;
      case 6:
          return $amarelo;
          break;
      case 7:
          return $corderosa;
          break;
      default:
          $contador="erro";
    }
}
// distancia x da lateral esqueda do início da figura
$px = 3;
// distancia y do topo do início da figura
$py = -1;

// ESCOLHE COR DO FUNDO
$bg = cor($bg);
// PINTA O FUNDO
ImageFilledRectangle($img,0,0,$x,$y,$bg);

// ESCOLHE A COR DA BORDA
$bc = cor($bc);
// PINTA A BORDA
ImageRectangle($img,0,0,$x-1,$y-1,$bc);

// DEFINE TRANSPARENCIA
if (isset($tp)) {
    // ESCOLHE A COR DA TRANSPARENCIA
    $tp = cor($tp);
    ImageColorTransparent($img,$tp);
}

// ESCOLHE COR DA FONTE
$fg = cor($fg);
// ESCREVE O NUMERO
ImageString($img,$fonte,$px,$py,$contador,$fg);

// CONVERTE A IMAGEM PARA PNG
ImagePNG($img);

// DESTROI A IMAGEM
ImageDestroy($img);
?>

Na próxima página, irei mostrar um exemplo de chamada do arquivo counter.php, com as várias ações que ele possui.

Comentários:

Mostrando 1 - 10 de 17 comentários
h forny disse:
tenho php instalado no winxp, com iis, gd2. A imagem gerada através da página php não aparece no browser. No IE aparece um monte de caracteres (lixo). No firefox, diz que não pode ser exibida porque contém erros. Se configurar para criar uma imagem, ela é criada e abrindo com prg de imagem ela é perfeita. Help!!! configuração do php.ini ? o q pode ser.
abs
01/08/2005 9:26pm (~11 anos atrás)

Richard Lima disse:
dê um phpinfo() e verifique se a gd está habilitada.. sem esse tipo de suporte, os script do tipo não funcionarão
20/05/2002 8:52am (~14 anos atrás)

Richard Lima disse:
na instalação do php, tente usar isto:
./configure -with-gd=/path_para_a_gd_lib
20/05/2002 6:58am (~14 anos atrás)

Richard Lima disse:
a GD roda com PHP, é nele que se habilita a biblioteca.. e se o php estiver rodando certinho no IIS, entao deveria estar funcionando...
20/05/2002 6:55am (~14 anos atrás)

Richard Lima disse:
se aparece o numero é porque a imagem foi gerada.. no caso o gráfico seria isso!
20/05/2002 6:52am (~14 anos atrás)

Richard Lima disse:
Infelizmente - de verdade - só consigo fazer suposições pra esse problema, quem sabe infundadas.. ou não.. já que nunca usei leitura de arquivos pra esse tipo de movimentação intensa...
1) já que o script retorna a imagem formada (vc nao comentou erro na imagem), o problema pode estar acontecendo na leitura do arquivo. Quem sabe, leitura enquanto ele está aberto por outro visitante para escrita e consequentemente, vazio, retornando 0, que depois é gravado por cima do conteúdo anterior.. reiniciando o contador.
2) experimente usar uma base de dados pra ver como se comporta.. e nos dê uma resposta, pois também fiquei curioso agora..

E se alguma outra pessoa tiver uma idéia formada mais segura a esse respeito.... esteja à vontade..
10/05/2002 7:41am (~14 anos atrás)

Para instala a GD basta ir no arquivo PHP.INI e retirar o ; que fica na frente de php_gd.dll? Não tenho que instalar nenhum arquivo?
03/05/2002 9:22pm (~14 anos atrás)

Richard Lima disse:
Instale a GD no PHP da mesma forma que você sabe instalar caso fosse usar o Apache: abra o PHP.INI, indique corretamente o diretório de extensões do PHP na diretiva de configuração "extension_dir", descomente a linha ;extension=php_gd.dll e salve seu arquivo, se for usar o PHP 4.2, deve-se usar a php_gd2.dll.
Sobre o Omni, que nunca usei, talvez esse endereço possa ajudar mais que eu: "http://www.portalapucarana.com.br/phpport/install-windows95-nt.html" ...tem uma instalação com PHP pra Omni lá..
02/05/2002 12:30pm (~14 anos atrás)

Então como faço para instalar o GD no PHP e como fazer o Omni enxergar ele?
02/05/2002 11:38am (~14 anos atrás)

Richard Lima disse:
É no php que você tem que instalar a GD. No omni você só precisa fazêr com que ele enxergue php.
02/05/2002 7:31am (~14 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)