Ir para conteúdo

POWERED BY:

Arquivado

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

CaptainZap

Contador de visitantes

Recommended Posts

Galera, tô com um problema chato, e não sei o que fazer

No servidor local, aqui do meu pc o contador funciona perfeitamente, conta direitinho.
Já no servidor acontece o contador está contando de 2 em 2! por exemplo de 1 vai para 3 de 3 para 5.

ME AJUDEM!!!!

index.php

<?php
	$arquivo = "visitas.txt"; 
	$contador = 0; 
                        
	$fp = fopen($arquivo,"r"); 
	$contador = fgets($fp, 26); 
	fclose($fp);
 
 	++$contador;
	
	                                
	$fp = fopen($arquivo,"w+"); 
	fwrite($fp, $contador, 26); 
	fclose($fp); 
?>
<body>
<?php
print "Essa página já conteve <strong>".$contador."</strong> visitantes.";
?></body>

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
	$arquivo = "visitas.txt"; 
	$contador = 0; 
                        
	$fp = fopen($arquivo,"r+"); 
	$contador = fgets($fp); 
	fclose($fp);
 
 	$contador++;
	                              
	$fp = fopen($arquivo,"w+"); 
	fwrite($fp, $contador); 
	fclose($fp); 
?>
<body>
<?php
print "Essa página já conteve <strong>".$contador."</strong> visitantes.";
?></body>

 

Inicialize o visitante.txt com zero.

Compartilhar este post


Link para o post
Compartilhar em outros sites

continua contando de 2 em 2, só que agora na primeira vez de 1 ele foi pra 4 e dps prosseguiu > 6 > 8 > 10

 

e no local funciona de 1 em 1 normalmente!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então está passando pelo o código mais de uma vez no servidor, verifica isso. O seu arquivo só tem esse pedaço de código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas como? é o mesmo arquivo do servidor local e do servidor na web... vou postar o código "inteiro"

 

<!DOCTYPE html>
<html lang="pt-br">
<head>

		
		<title>titulo</title>
        
		

<?php
		$arquivo = "visitas.txt"; 
	$contador = 0; 
                        
	$fp = fopen($arquivo,"r+"); 
	$contador = fgets($fp); 
	fclose($fp);
 
 	$contador++;
	                              
	$fp = fopen($arquivo,"w+"); 
	fwrite($fp, $contador); 
	fclose($fp); 
?>

		<script type="text/javascript"> 
var fundos = 4;
ran = Math.round(Math.random() * (fundos-1))+1 
if (ran == (1)) { 
url_background=("imagens/bg1.jpg"); 
} 
if (ran == (2)) { 
url_background=("imagens/bg2.jpg") 
}  
if (ran == (3)) { 
url_background=("imagens/bg3.jpg") 
}
if (ran == (4)) { 
url_background=("imagens/bg4.jpg") 
} 
function carrega() { 
document.body.background = url_background; 
} 
		</script>
</head>
<body onLoad="carrega()">
	<div class="menu">
    	menu
    </div>
    
   <div class=conteudo>
todo conteudo
</div>       
             
            
            <div class="cont"><?php
print "Essa página já conteve <strong>".$contador."</strong> visitantes.";
?></div>
            

            
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php session_start();
	$arquivo = "visitas.txt"; 
	$contador = 0; 
                        
		if(empty($_SESSION['randUser'])){
		$randUser = rand(1,9999);
		$_SESSION['randUser'] = $randUser;
		$arquivo = "visitas.txt"; 
		$contador = 0; 
							
		$fp = fopen($arquivo,"r+"); 
		$contador = fgets($fp); 
		fclose($fp);
	 
		$contador++;
									  
		$fp = fopen($arquivo,"w+"); 
		fwrite($fp, $contador); 
		fclose($fp); 
	}else{
		$fp = fopen($arquivo,"r+"); 
		$contador = fgets($fp); 
		fclose($fp);
	}
?>
<body>
<?php
print "Essa página já conteve <strong>".$contador."</strong> visitantes.";
?></body>

 

 

Coloque esse código, isso também irá evitar que o mesmo usuário fique apertando f5, tornando a contagem de usuários incorreta.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 10/05/2013 at 19:50, CaptainZap disse:

 

Galera, tô com um problema chato, e não sei o que fazer

 

No servidor local, aqui do meu pc o contador funciona perfeitamente, conta direitinho.

Já no servidor acontece o contador está contando de 2 em 2! por exemplo de 1 vai para 3 de 3 para 5.

 

ME AJUDEM!!!!

 

index.php

<?php
	$arquivo = "visitas.txt"; 
	$contador = 0; 
                        
	$fp = fopen($arquivo,"r"); 
	$contador = fgets($fp, 26); 
	fclose($fp);
 
 	++$contador;
	
	                                
	$fp = fopen($arquivo,"w+"); 
	fwrite($fp, $contador, 26); 
	fclose($fp); 
?>
<body>
<?php
print "Essa página já conteve <strong>".$contador."</strong> visitantes.";
?></body>

Cara, eu sinceramente não estou entendo a lógica desse contador.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 10/05/2013 at 20:37, dedas disse:

Cara, eu sinceramente não estou entendo a lógica desse contador.

como assim? tá normal cara..

 

  Em 10/05/2013 at 20:37, Rafael Rosario disse:

 

<?php session_start();
	$arquivo = "visitas.txt"; 
	$contador = 0; 
                        
		if(empty($_SESSION['randUser'])){
		$randUser = rand(1,9999);
		$_SESSION['randUser'] = $randUser;
		$arquivo = "visitas.txt"; 
		$contador = 0; 
							
		$fp = fopen($arquivo,"r+"); 
		$contador = fgets($fp); 
		fclose($fp);
	 
		$contador++;
									  
		$fp = fopen($arquivo,"w+"); 
		fwrite($fp, $contador); 
		fclose($fp); 
	}else{
		$fp = fopen($arquivo,"r+"); 
		$contador = fgets($fp); 
		fclose($fp);
	}
?>
<body>
<?php
print "Essa página já conteve <strong>".$contador."</strong> visitantes.";
?></body>

 

 

Coloque esse código, isso também irá evitar que o mesmo usuário fique apertando f5, tornando a contagem de usuários incorreta.

feito!

Compartilhar este post


Link para o post
Compartilhar em outros sites

nada! continua a mesma coisa.. só que agora tenho uma novidade ahhaha

O servidor está c algum problema comigo, agora qual eu não sei..

 

coloquei os mesmos arquivos em outro servidor, gratuito, e funciona NORMALMENTE!

 

o que eu posso fazer?? -.-'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, isso é muito estranho kkkkkkk Não tem nenhum tipo de redirect, refresh, nada... Faz o seguinte, isola o contador em uma pasta separada do site e testa ele sem nenhum outro elemento.

 

Vê no que da e posta aqui :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora dá erro direto de fopen

fgets e fclose



bom, dá erro aqui no local.. no servidor web ele não dá erro, mas continua a mesma coisa.. só que parece que agora tá de 3 em 3!!!! o.O



continua mesma coisa galera.. servidor local funciona, e no web nao.



nada? :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, uma suspeita que eu tenho é que algum redirecionamento esteja causando essa contagem duplicada. De qualquer forma, o script está sendo executado duas vezes.

 

Eu achei estranho você ter aberto e fechado o arquivo duas vezes só pra alterar o conteúdo do arquivo. Isso é desnecessário e consome mais recursos do servidor, quando tudo poderia ser feito em apenas uma abertura de arquivo. Eu reescrevi aqui de forma a melhorar nesse quesito, mas provavelmente não é a solução do seu problema.

 

Teste aí:

 

$arquivo = "visitas.txt";

if  (!is_file($arquivo)) {
    $contador = 1;
    file_put_contents($arquivo, $contador);
} else {
    file_put_contents($arquivo,
      $contador = (int) file_get_contents($arquivo) + 1
    );
}

echo $contador;

 

 

Eu testei aqui e local funcionou beleza. :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 10/05/2013 at 22:10, mangakah disse:

Cara, uma suspeita que eu tenho é que algum redirecionamento esteja causando essa contagem duplicada. De qualquer forma, o script está sendo executado duas vezes.

 

Eu achei estranho você ter aberto e fechado o arquivo duas vezes só pra alterar o conteúdo do arquivo. Isso é desnecessário e consome mais recursos do servidor, quando tudo poderia ser feito em apenas uma abertura de arquivo. Eu reescrevi aqui de forma a melhorar nesse quesito, mas provavelmente não é a solução do seu problema.

 

Teste aí:

 

$arquivo = "visitas.txt";

if  (!is_file($arquivo)) {
    $contador = 1;
    file_put_contents($arquivo, $contador);
} else {
    file_put_contents($arquivo,
      $contador = (int) file_get_contents($arquivo) + 1
    );
}

echo $contador;

 

 

Eu testei aqui e local funcionou beleza. :D

 

realmente gostei da sua observação..

e obrigado por isso..

 

porém, no servidor da web, continua a mesma coisa, de 2 em 2.. no local funciona normal!

 

testa você mesmo!

o contador tá no canto inferior direito

 

http://www.deliciasminilanches.com/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vi lá e realmente não tem nenhum redirecionamento ou coisa parecido... o acesso é direto.

 

 

Então vamos ver o que está acontecendo por baixo dos panos.

 

Faça o seguinte:

 

Adicione esse código para gerar um arquivo de log (log.txt):

 

$fh = fopen("log.txt", 'a+');
fwrite($fh, @date('H:i:s') . "-" . $contador . "\n");
fclose($fh);

 

Esse código adicionará uma linha ao arquivo log.txt cada vez que for acessado, essa linha é formada pela hora e pela situação do contador. Execute algumas vezes e poste o conteúdo de log.txt aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 10/05/2013 at 22:51, mangakah disse:

Vi lá e realmente não tem nenhum redirecionamento ou coisa parecido... o acesso é direto.

 

 

Então vamos ver o que está acontecendo por baixo dos panos.

 

Faça o seguinte:

 

Adicione esse código para gerar um arquivo de log (log.txt):

 

$fh = fopen("log.txt", 'a+');
fwrite($fh, @date('H:i:s') . "-" . $contador . "\n");
fclose($fh);

 

Esse código adicionará uma linha ao arquivo log.txt cada vez que for acessado, essa linha é formada pela hora e pela situação do contador. Execute algumas vezes e poste o conteúdo de log.txt aqui.

 

 

 

 

coloco assim?

<?php
$fh = fopen("log.txt", 'a+');
fwrite($fh, @date('H:i:s') . "-" . $contador . "\n");
fclose($fh);

$arquivo = "visitas.txt";
 
if  (!is_file($arquivo)) {
    $contador = 1;
    file_put_contents($arquivo, $contador);
} else {
    file_put_contents($arquivo,
      $contador = (int) file_get_contents($arquivo) + 1
    );
}?>

 

porque se for assim não tá gerando nada..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que colocar APÓS, não antes.

 

 

$arquivo = "visitas.txt";
 
if  (!is_file($arquivo)) {
    $contador = 1;
    file_put_contents($arquivo, $contador);
} else {
    file_put_contents($arquivo,
      $contador = (int) file_get_contents($arquivo) + 1
    );
}

$fh = fopen("log.txt", 'a+');
fwrite($fh, @date('H:i:s') . "-" . $contador . "\n");
fclose($fh);

Compartilhar este post


Link para o post
Compartilhar em outros sites
20:32:36-12

20:32:36-13

20:32:37-14

20:32:40-15

20:32:40-16

20:32:43-17

20:32:43-18

20:32:45-19

20:32:46-20

20:33:07-21

20:33:09-22

20:33:20-23

20:33:20-24



engraçado, dá como se tivesse atualizado mais de uma vez...


como se eu fosse 2 pessoas...

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.