|
|
|
||||||||||||||||||||||
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Parceiros - CSS para Web Design - S.O.S Designers - Slackware-Brasil - Crie seu Web site - Oficina da Net |
Usuários ativos com PHPVeremos como mostrar os usuários ativos em cada momento na nossa página. No nosso manual de PHP abordámos a utilização de sessões e demos algum exemplo práctico no que este tipo de variáveis podiam ser usadas para dar ao nosso site um aspeto mais dinâmico.
Muitos de vocês podem ter visto em certos sites um contador de usuários que se encontram nesse momento a navegar pelas mesmas páginas que vocês. Se repararam bem, podem ter observado que, na maioria dos casos (por não dizer todos), o site em questão está programado em ASP como linguagem de servidor. Efetivamente, ASP permite uma gestão mais acessível das sessões através do famoso ficheiro global.asa. Mas isto não quer dizer que PHP seja incapaz de o fazer, o que acontece é, que temos de trabalhar um bocadinho mais para o fazer. A verdade é que todas as linguagens têm os seus pros e os seus contras, e neste caso a verdade é que ASP torna-se mais versátil do que PHP. Mesmo assim, temos de comentar que , com a sua versão 4, PHP melhorou bastante no que diz respeito a sessões. Aqui mostramos uma maneira simples de contabilizar os usuários ativos do vosso site usando para este propósito uma tabela (array). Dentro desta tabela, iremos armazenando os diferentes endereços IP dos visitantes do nosso site e na hora e data na que o visitante executou por última vez o script. Deste modo, a tabela tem de ir apagando progressivamente as sessões que não tenham sido renovadas num tempo que nós consideremos limite. Nós fixámos o limite em 24 minutos pois é o tempo pré-definido em PHP para suprimir os dados de uma sessão. Para modificar este tempo de vida máxima de uma sessão pode fazer-se no php.ini a partir do parâmetro sesion.gc_maxlifetime onde expressaremos o valor que queremos em segundos. Atenção, este tempo máximo é restaurado ao seu valor inicial cada vez que o usuário realiza uma petição ao servidor, isto quer dizer que um visitante poderá navegar o tempo que bem entender mantendo a mesma sessão sempre e quando não fique mais de 24 minutos sem realizar nenhum tipo de acção (petição ao servidor). Para o correcto funcionamento do script, é necessário criar uma tabela na nossa base de dados. Estas sentença SQL pode ajudar-nos na tarefa: CREATE TABLE control_ip (ip VARCHAR(15) NOT NULL,data INT(14) UNSIGNED NOT NULL,INDEX (ip)); Como podem ver, o campo ip, que armazena o endereço IP do visitante, está indexado. Isto vai nos permitir uma selecção rápida. Em contrapartida, como todos os campos indexados, o seu tamanho em memória será dobrado o qual não tem muita importância pois a tabela terá um numero de registos bastante limitado. O importante é que este script se execute rapidamente sem consumir demasiados recursos do servidor, sobretudo se temos em conta que se trata de um código que será sistematicamente executado em cada uma das páginas do site. Passemos a seguir a mostrar o script que utilizaremos: <? //////////////////////////////////////////// //USUARIOS ATIVOS //Calcula o número de usuários ativos //////////////////////////////////////////// function usuarios_ativos() { //permitimos o uso da variável portadora do numero ip na nossa função global $REMOTE_ADDR; //atribuímos um nome memotecnico à variável $ip = $REMOTE_ADDR; //definimos o momento actual $agora = time(); //conectamos à base de dados //Usem os vossos próprios parâmetros!! $conn = mysql_connect($host,$user,$password); mysql_select_db($db,$conn); //actualizamos a tabela //apagamos os registros das ip inactivas (24 minutos) $limite = $agora-24*60; $ssql = "delete from control_ip where data < ".$limite; mysql_query($ssql); //vemos se o ip do visitante existe na nossa tabela $ssql = "select ip, data from control_ip where ip = '$ip'"; $result = mysql_query($ssql); //se existe actualizamos o campo data if (mysql_num_rows($result) != 0) $ssql = "update control_ip set data = ".$agora." where ip = '$ip'"; //se não existe inserimos o registro correspondente à nova sessão else $ssql = "insert into control_ip (ip, data) values ('$ip', $agora)"; //executamos a sentença sql mysql_query($ssql); //calculamos o número de sessões $ssql = "select ip from control_ip"; $result = mysql_query($ssql); $usuarios = mysql_num_rows($result); //liberamos memória mysql_free_result($result); //retornamos o resultado return $usuarios;} ?> Podem observar, como vem sendo habitual, que o script é expressado em forma de função. Depois de definir a IP e o momento no que o script está a ser executado, passamos a interaccionar com a base de dados. Dentro deste processo, podemos diferenciar diferentes fases:
A função finaliza liberando o espaço de memória utilizada nas suas consultas e enviado o resultado do cálculo efectuado. Em linhas gerais o script é de fácil compreensão. Pode que alguma das funções utilizadas vos seja desconhecida. Se assim for, acudam à página oficial de PHP onde poderão encontrar mais detalhes. Para obter o valor proporcionado pela função ao nosso script principal teremos de realizar uma chamada clássica do tipo: $active_users = usuarios_ativos(); Em definitiva, aqui temos um script simples que pode dar ao vosso site uma imgem um pouco mais dinâmica. Para alem disso, podem utiliza-lo e melhora-lo para criar o vosso próprio sistema de estatísticas internas. Isso fica com vocês...
Autoria e outras referências sobre este artigo Dentro deste artigo: + 1 manual relacionado + 2 Categorias relacionadas + 1 Comentário sem rever
Manuais relacionados com este artigo Dentro de Workshop de PHP Anterior: Paginação de resultados com PHP e MySQL Categorias relacionadas Através das categorias do nosso diretório podem ser encontrados outros tipos de recursos relacionados com este artigo: + Entrar em PHP+ Entrar em Scripts em PHP Comentário sem rever
|
| Sobre nós | Copyright | Anuncie | Entrar em contato | <criarweb> |