Ir para conteúdo

POWERED BY:

Arquivado

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

jnejunior

[Resolvido] contador de acessos em texto

Recommended Posts

tenho esse programinha que mostra quantos acessos teve uma página usando imagens "gif", mas quanto o arquivo "contador.txt" não existe ele não cria, e quando o arquivo existe ele não adiciona valores...

<html>
  <head>
     <title>Contador PHP com imagens</title>
  </head>

  <body>
     <?php

     date_default_timezone_set('America/Sao_Paulo');

     $arquivo = "contador.txt";
     $contador = 1;

     $fp = fopen($arquivo, "r");
     $contador = fgets($fp, filesize($arquivo));
     fclose($fp);

     ++$contador;

     $fp = fopen($arquivo, "w+");
     fwrite($fp, $contador, filesize($arquivo));
     fclose($fp);
     ?>

     <table width="102" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
           <?php
           /* Arrumo de 0-9 nome dos arquivos gifs */
           $numero[0] = "0.gif";
           $numero[1] = "1.gif";
           $numero[2] = "2.gif";
           $numero[3] = "3.gif";
           $numero[4] = "4.gif";
           $numero[5] = "5.gif";
           $numero[6] = "6.gif";
           $numero[7] = "7.gif";
           $numero[8] = "8.gif";
           $numero[9] = "9.gif";

           /* Cria-se variável para que contenha a longitude da cadeia */
           /* é a partir daí onde se sabe que mostrará o contador em GIFS */

           $longitude = strlen($contador);

           /* Loops para mostrar os números */
           $ate = 6 - $longitude;

           For ($celula = 1; $celula <= $ate; $celula++) {
              echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[0]\"></div></td>";
           }
           $ate = $longitude - 1;
           For ($celula = 0; $celula <= $ate; $celula++) {
              $num = substr($contador, $celula, 1);
              echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[$num]\"></div></td>";
           }
           ?>

        </tr>
     </table> 
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mude a permisão do fopen , pra w+ , no Primeiro FOPEN

 

Algum Erro Aparece ?

 

 

mudei como pediu e deu isso.

 

Warning: fgets(): Length parameter must be greater than 0 in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 15

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo , vamos testar desta forma ..

 

<?php

     date_default_timezone_set('America/Sao_Paulo');

     $arquivo = "contador.txt";
  if(!file_exists($arquivo))
   {
      @fopen($arquivo, 'w+');
   }
     $contador = 1;

     $fp = fopen($arquivo, "r");
     fwrite($fp, '0');
     $contador = file_get_contents($arquivo);
     fclose($fp);

     ++$contador;

     $fp = fopen($arquivo, "w+");
     fwrite($fp, $contador);
     fclose($fp);
     ?>

 

Poste o Resultado

Compartilhar este post


Link para o post
Compartilhar em outros sites

fgets , so pegar arquivo com 1 byte ++ , você tem que escrever algo de inicio pra ele ler e pegar o conteudo ou seja , seu arquivo antes tava NULL , então botei o contador antes do LOOP como 0 e depois ele vai incrementar 1 quando o cara entrar na pagina ou seja , vai colocar ZERO , Incrementar 1 , se você bota o contador como 1 ele vai pra 2 assim por diante .. ^_^

 

 

@Obs: , esse contador ele se incrementa a cada refresh na pagina , uma dica seria você gravar uma SESSION com o IP do cara ou um COOKIE , e verificar se aquela sessão ja tiver valor , se tiver não adiciona +1 na contagem no txt ^_^

session_start();
$_SESSION['alerady_visit'] = $SERVER['REMOTE_ADDR'];
if($_SESSION['alerady_visit'] == $_SERVER['REMOTE_ADDR'])
 {
   exit();
 } 

No caso eu dei o EXIT para parar o script , isso seria bom se você tivese a pagina do contador inclusa , ai sim so para o contador e não o resto da applicação

 

Abraços Boa Sorte ~

 

Andrey Knupp

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, tenha cuidado com o uso do @ ele pode ser uma faca de dois gumes para a sua aplicação.

 

O @ nos comandos servem para hidar, ou esconder o erro padrão da função, assim não mostrando o erro na página.

 

Agora imagine você está criando um sistema gigante e logo se deparar com um erro, você fica doido revirando o código e não consegue encontrar, portanto cuidado! :blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu coloco @ em certas funçoes para não deixar o 'visitante' espantado com o erro que possa aparecer .

nesse caso eu seto essa funçao numa variavel e faço um if , elaborando minha propia mensagem

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dustandrubber

tentei criar uma sessão para bloquear varios refresh's mas não consegui fazer, ou desaprendi PHP ou o teu script ta zuado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem como você postar o Script Todo ?

 

 

olha ai:

 

<html>
  <head>
     <title>Contador PHP com imagens</title>
  </head>

  <body>
     <?php
     date_default_timezone_set('America/Sao_Paulo');

     $arquivo = "contador.txt";
     if (!file_exists($arquivo)) {
        fopen($arquivo, 'w+');
     }

     $contador = 1;

     $fp = fopen($arquivo, "r");
     fwrite($fp, '0');
     $contador = file_get_contents($arquivo);
     fclose($fp);
     ++$contador;

     $fp = fopen($arquivo, "w+");
     fwrite($fp, $contador);
     fclose($fp);
     ?>

     <table width="102" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
           <?php
           /* Arrumo de 0-9 nome dos arquivos gifs */
           $numero[0] = "0.gif";
           $numero[1] = "1.gif";
           $numero[2] = "2.gif";
           $numero[3] = "3.gif";
           $numero[4] = "4.gif";
           $numero[5] = "5.gif";
           $numero[6] = "6.gif";
           $numero[7] = "7.gif";
           $numero[8] = "8.gif";
           $numero[9] = "9.gif";

           /* Cria-se variável para que contenha a longitude da cadeia */
           /* é a partir daí onde se sabe que mostrará o contador em GIFS */

           $longitude = strlen($contador);

           /* Loops para mostrar os números */
           $ate = 6 - $longitude;

           for ($celula = 1; $celula <= $ate; $celula++) {
              echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[0]\"></div></td>";
           }
           $ate = $longitude - 1;
           for ($celula = 0; $celula <= $ate; $celula++) {
              $num = substr($contador, $celula, 1);
              echo "<td width=\"17\" height=\"28\" valign=\"top\"><div align=\"center\"><img src=\"$numero[$num]\"></div></td>";
           }
           ?>

        </tr>
     </table> 
  </body>
</html>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo , você conta essa 'visita' quando o cara clica em um botão ?

 

 

não somente quando entra na página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem , então vamos pensar um pouco

      $ip = $_SERVER['REMOTE_ADDR'];
       if($_SESSION['visit'] == ""){
       $_SESSION['visit'] = $ip;
       exit();
       }
       if($_SESSION['visit'] != "")
       {
           echo 'Você Ja Viu Esse Conteudo';
           exit();
       }

 

Refiz o codigo ..

 

Em cima do primeiro exit , você vai por toda execução do codigo .. ai sim ele vai executar 1 vez ..

e depois que o cara der refresh ele para o script deixando a mensagem , no caso você não vai deixar a mensagem , você não vai contar +1 no txt ...

 

Duvidas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá, onde coloco o código?

 

e quando ele chegar no exit(); ele não vai mostrar nada "echo".

 

???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colher de cha pra voce ..

 

      <?php

       $ip = $_SERVER['REMOTE_ADDR'];
       if($_SESSION['visit'] == ""){
         if($_SESSION['visit'] != "")
         {
           exit();
         }


       $_SESSION['visit'] = $ip;
             date_default_timezone_set('America/Sao_Paulo');

     $arquivo = "contador.txt";
     if (!file_exists($arquivo)) {
        fopen($arquivo, 'w+');
     }

     $contador = 1;

     $fp = fopen($arquivo, "r");
     fwrite($fp, '0');
     $contador = file_get_contents($arquivo);
     fclose($fp);
     ++$contador;

     $fp = fopen($arquivo, "w+");
     fwrite($fp, $contador);
     fclose($fp);

       exit();
       }
       // mostra contador ou script a ser executado .. 

       ?>

 

Acima no caso , eu so implementei a funçao pra não contar +1 no TXT mais a exibiçao dele tem que ser disponivel , acho que isso você faz ne :P

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

a parte que você implementou esta dando esse erro:

 

Notice: Undefined variable: _SESSION in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 12 Notice: Undefined variable: _SESSION in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 13

Compartilhar este post


Link para o post
Compartilhar em outros sites

não mudei os nomes, e o session_start(); tinha esquecido realmente, mas ta dizendo que a variavel contador não foi definida

 

Notice: Undefined variable: contador in C:\Webserver\Apache2.2\htdocs\contadorAcesso\index.php on line 59

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.