Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

Usuários on-line + Recorde de usuários on-line

26-04-2007 13:18

Bom, depois de pensar muito em uma lógica de como saber qual o máximo de usuários que já acessaram o site ao mesmo tempo, consegui criar este script, e agora vou compartilhar com vcs.

Primeiro usamos duas tabelas, uma para saber quantos usuários estão on-line no momento (USERONLINE) e outra para saber qual o recorde de usuários que acessaram o site ao mesmo tempo (MAXONLINE)

Vamos as tabelas. Vá até o painel de administração do banco de dados e execute esta seqüencia sql para criar as duas tabelas

CREATE TABLE `maxonline` (   `dia` DATE NOT NULL,   `horario` TIME NOT NULL,   `qtos` INT(11) NOT NULL ); CREATE TABLE `useronline` (   `timestamp` INT(15) NOT NULL,   `ip` VARCHAR(40) NOT NULL,   `file` VARCHAR(100) NOT NULL   )

depois uma única página php que fará todas funções

online.php

<?php    ////////////////////////////////////////////  // Criado por <-=IMPOSSIVEL=->  //  // webmaster@rindomuito.com      //  // http://rindomuito.com             //  // não retire os créditos para     //  // não retirar meu ânimo         //  ////////////////////////////////////   //lembre-se que deve existir uma conexão com o banco de dados.   // aqui pega a url real onde o usuario esta navegando $path = empty($HTTP_SERVER_VARS['PATH_INFO'])?$HTTP_SERVER_VARS['PHP_SELF']:$HTTP_SERVER_VARS['PATH_INFO']; $host = empty($HTTP_SERVER_VARS['SERVER_NAME'])?$HTTP_ENV_VARS['SERVER_NAME']:$HTTP_SERVER_VARS['SERVER_NAME']; $string=$_SERVER['QUERY_STRING']?'?'.$_SERVER['QUERY_STRING']:''; $hostpath="$host$path$string";      // este $hostpath é a url real neste momento $timeoutseconds = 600; // Tempo para renovar a lista de usuários on-line $ip = $_SERVER['REMOTE_ADDR'];     // caputura o ip do usuario $timestamp=time();          //pega o timestampo atual (não mexer) $timeout=$timestamp-$timeoutseconds;     //para saber quais os registros velhos para serem apagados // a seguir a sequencia sql para apagar os registros antigos da tabela mysql_query("DELETE FROM useronline WHERE timestamp<$timeout"); // a seguir insere a visita atual na tabela, inserindo o ip e a pagina onde esta visitantdo mysql_query("INSERT INTO useronline VALUES ('$timestamp','$ip','$hostpath')"); //a seguir ele conta quantos ip distintos existem registrados na tabela USERONLINE $result = mysql_query("SELECT DISTINCT ip FROM useronline"); $user = mysql_num_rows($result); // $user é o valor de visitantes on-line baseado nos acessos dos ultimos 600 segundos //agora para saber o recorde de acessos simultaneos // primeiro deletamos os registros de usuarios menores/igual ao atual($user) da tabela MAXONLINE mysql_query("DELETE FROM maxonline WHERE qtos<=$user"); // agora insere o dia, a hora e a quantidade de usuarios on line neste momento mysql_query("INSERT INTO maxonline VALUES (now(),now(),'$user')"); // aqui fazemos uma busca pelo maior valor registrado na tabela, que vai ser o record de usuarios online $max = mysql_query("SELECT * FROM maxonline ORDER BY qtos DESC LIMIT 1"); while ($reg = mysql_fetch_array($max)){     /* executa sql */          // aqui convertemos a data para formato dd/mm/aa $dia = substr($reg['dia'],8,2) . "/" . substr($reg['dia'],5,2) . "/" . substr($reg['dia'],2,2); //convertemos o horario para  hh/mm $horario = substr($reg['horario'],0,2) . ":" . substr($reg['horario'],3,2) . "h"; $qtos = $reg['qtos']; } // $qtos é o recorde de acessos simultaneos ao site ?>

Feito isto é só usar um include no inicio das paginas.
Obs. insira o include em todas paginas, assim todos acessos serão registrados.

Não se esqueça de criar ter uma conexão com o banco de dados.
Ex.

<? /* informações para conexão à base de dados */ $host = "localhost";  // host do mysql $user = "root";       // usuário $pass = "";     // senha do usuário $base = "seubanco"; // nome da base de dados // conecta o mysql $conn = mysql_connect($host, $user, $pass) or die ("<br><br><center>Problemas ao conectar no servidor: " . mysql_error() . "</center>"); // seleciona a base de dados $banc = mysql_select_db($base) or die ("<br><br><center>Problemas ao selecionar a base de dados do sistemas: " . mysql_error() . "</center>"); ?>


<?php include "online.php";  ?>

Pronto, o script já vai estar funcionando, agora para exibir os resultados é só inserir os seguintes códigos no lugar onde deseja que seja exibido o resultado

Usuários on line no momento
$user

Recorde de usuários on line
$qtos

Dia do recorde
$dia

Horário do recorde
$horario

Obs. lembre-se, se for exibir o resultado dentro de um codigo html use a função "echo", Ex.

Recorde de usuários on-line:  <?php echo "<a title='Dia $dia as $horario'><u> $qtos </u></a>"; ?>

Se vc acessar a tabela USERONLINE vai saber quais as paginas que foram visitas por todos usuários nos últimos 10min.(600segundos). Não criamos um script para exibir estes resultados por não achar importante, ja que para saber quais as paginas visitadas existem estatísticas de visitas, mesmo assim, caso tenha curiosidade para saber onde estão seus usuários atualmente, olhe a tabela, lá, vai ter registra o IP o TIMESTAMP (momento) e a URL de cada visita nos últimos 10m.

Tentei ser o mais resumido e explicativo que pude, se mesmo assim tiver duvidas ou apresentar erro é só postar que teremos prazer em ajudar.
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Mais de 100 postagens
Mais de 100 postagens
Tópico Autor
Mensagens: 237
Localização: Florianópolis/SC
Contato:

Re: Usuários on-line + Recorde de usuários on-line

26-04-2007 13:22

Lembre-se, não use as identificações
$user $dia $horario $qtos

para outras funções, ou haverá conflito de informações.
0
MIDZ.com.br
http://www.midz.com.br
Soluções Web
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17587
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Re: Usuários on-line + Recorde de usuários on-line

26-04-2007 14:48

Muito bom, aprovado. :)
0
A melhor hospedagem para o seu site HostGator!

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado