Jump to content


Photo

Usuários Online C/ Txt


  • Faça o login para participar
5 replies to this topic

#1 {TeRmInAtOr}

{TeRmInAtOr}

    12 Horas

  • Usuários
  • 174 posts
  • Sexo:Masculino
  • Localidade:New Hamburgo, RS

Posted 20/01/2005, 16:24

Ae glr fiz um eskema de usuários online usando txt, não sei se tah correto ainda nao sei muita coisa sobre classes, espero que contribuam e qualquer coisa que estiver errada posta ae.

O que ele faz, ao entrar verifica se o ip ja nao existe na lista, caso seje encontrado apenas atualiza o timeout, se nao existir cadastra o ip na lista.
A cada acesso faz uma busca e elimina os registros expirados.


PHP

<?php
class UsersOnline{
var
$StrPatch;
var
$TimeOut;

    //Verifica se o ip consta na lista
    function Verifica($IpNow){
        $Arquivo = @file($this->StrPatch);
        $Reg = count($Arquivo);
        for($i=0;$i<$Reg;$i++){
            list($Ip,,) = explode("|",$Arquivo[$i]);
            if($Ip!=$IpNow)
                continue;
                return $i;
        }
    }
    
    
//Limpa ips com data expirada
    function Limpar(){
        $DataAgora = date("YmdHis");
        $Arquivo = @file($this->StrPatch);
        $Arquivo2 = @fopen($this->StrPatch,"w+");
        $Reg = count($Arquivo);
        for($i=0;$i<$Reg;$i++){
            list($Ip,$Data) = explode("|",$Arquivo[$i]);
            if($Data>$DataAgora){
                fwrite($Arquivo2,"$Ip|$Data");
            }
        }
        fclose($Arquivo2);  
    
}
    
    
//Cadastra o novo ip na lista
    function Salva(){
        $IpAgora = $_SERVER['REMOTE_ADDR'];
        $DataAgora = (date("YmdHis")+$this->TimeOut);
        $Arquivo = fopen($this->StrPatch,"a");
        fwrite($Arquivo,"$IpAgora|$DataAgora\n");
        fclose($Arquivo);
    }
    
    
//Atualiza o ip na lista
    function Update($Linha){
        $IpAgora = $_SERVER['REMOTE_ADDR'];
        $DataAgora = (date("YmdHis")+$this->TimeOut);
        $Arquivo = @file($this->StrPatch);
        $Arquivo2 = @fopen($this->StrPatch,"w+");
        $Reg = count($Arquivo);
        for($i=0;$i<$Reg;$i++){
            list($Ip,$Data) = explode("|",$Arquivo[$i]);
            if($i == $Linha)
                fwrite($Arquivo2,"$IpAgora|$DataAgora\n");
            else
                fwrite
($Arquivo2,"$Ip|$Data");
        }
        fclose($Arquivo2);
    }
    
    
//Verifica quantos estão online
    function Online(){
        $Arquivo = @file($this->StrPatch);
        $Reg = count($Arquivo);
        return $Reg;
    }
}



//Inicio
$online = new UsersOnline();
$online->StrPatch = 'online.txt';
$online->TimeOut = 200;

$Linha = $online->Verifica($_SERVER['REMOTE_ADDR']);
if(
is_null($Linha)){
    $online->Limpar();
    $online->Salva();
    $On = $online->Online();
}
else{
    $online->Update($Linha);
    $online->Limpar();
    $On = $online->Online();
}
echo(
$On." usuários online!");
?>

Edição feita por: {TeRmInAtOr}, 21/01/2005, 19:31.


#2 Lucaswdm

Lucaswdm

    Lucas WDM

  • Usuários
  • 284 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte
  • Interesses:PHP

Posted 12/02/2005, 21:41

eu alterei o script
se apenas uma pessoa estiver na pagina,
exibe USUARIO ONLINE (SINGULAR)
e se mais de uma estiver exibe USUARIOS ONLINE (PLURAL)

<?php
$number="1";
class UsersOnline{
var $StrPatch;
var $TimeOut;

    //Verifica se o ip consta na lista
    function Verifica($IpNow){
        $Arquivo = @file($this->StrPatch);
        $Reg = count($Arquivo);
        for($i=0;$i<$Reg;$i++){
            list($Ip,,) = explode("|",$Arquivo[$i]);
            if($Ip!=$IpNow)
                continue;
                return $i;
        }
    }
   
    //Limpa ips com data expirada
    function Limpar(){
        $DataAgora = date("YmdHis");
        $Arquivo = @file($this->StrPatch);
        $Arquivo2 = @fopen($this->StrPatch,"w+");
        $Reg = count($Arquivo);
        for($i=0;$i<$Reg;$i++){
            list($Ip,$Data) = explode("|",$Arquivo[$i]);
            if($Data>$DataAgora){
                fwrite($Arquivo2,"$Ip|$Data");
            }
        }
        fclose($Arquivo2); 
    }
   
    //Cadastra o novo ip na lista
    function Salva(){
        $IpAgora = $_SERVER['REMOTE_ADDR'];
        $DataAgora = (date("YmdHis")+$this->TimeOut);
        $Arquivo = fopen($this->StrPatch,"a");
        fwrite($Arquivo,"$IpAgora|$DataAgora\n");
        fclose($Arquivo);
    }
   
    //Atualiza o ip na lista
    function Update($Linha){
        $IpAgora = $_SERVER['REMOTE_ADDR'];
        $DataAgora = (date("YmdHis")+$this->TimeOut);
        $Arquivo = @file($this->StrPatch);
        $Arquivo2 = @fopen($this->StrPatch,"w+");
        $Reg = count($Arquivo);
        for($i=0;$i<$Reg;$i++){
            list($Ip,$Data) = explode("|",$Arquivo[$i]);
            if($i == $Linha)
                fwrite($Arquivo2,"$IpAgora|$DataAgora\n");
            else
                fwrite($Arquivo2,"$Ip|$Data");
        }
        fclose($Arquivo2);
    }
   
    //Verifica quantos estão online
    function Online(){
        $Arquivo = @file($this->StrPatch);
        $Reg = count($Arquivo);
        return $Reg;
    }
}



//Inicio
$online = new UsersOnline();
$online->StrPatch = 'online.txt';
$online->TimeOut = 200;

$Linha = $online->Verifica($_SERVER['REMOTE_ADDR']);
if(is_null($Linha)){
    $online->Limpar();
    $online->Salva();
    $On = $online->Online();
}
else{
    $online->Update($Linha);
    $online->Limpar();
    $On = $online->Online();
}
if($On == $number)

echo"$On usuário online!";

else
echo ($On." usuários online!")

?>


Espero ter ajudado,
VLW !!!
Lucas Mariano - Data2 Soluções para Internet
Idealizador :: Concurso #GatasdoTW
Belo Horizonte, MG

#3 LGF

LGF

    Novato no fórum

  • Usuários
  • 7 posts
  • Sexo:Não informado

Posted 19/02/2005, 08:38

Pessoal tem como fazer com que este script multiplique o resultado de usuarios online?

Ex.:
Eu quero que os resultados sejam multiplicados por 2.

Sendo assim se eu tiver 10 acessos, irá aparecer que eu tenho 20

Como que ficaria o codigo trabalhando desta forma?

Edição feita por: LGF, 19/02/2005, 08:41.


#4 LucasMS

LucasMS

    Super Veterano

  • Usuários
  • 2076 posts
  • Sexo:Não informado

Posted 19/02/2005, 08:42

nessa linha coloque:
$On2 = $On*2;
echo ($On2." usuários online!")

#5 # INSIDE # - GUI -

# INSIDE # - GUI -

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Não informado
  • Localidade:São Sebastião do Caí - RS
  • Interesses:WebDesign, Programação em Delphi, Flash, PHP, Música Digital, etc.

Posted 08/04/2005, 21:34

Olha, comigo n deu certo naum, tem q muda alguma coisa pro script funciona? <_<
<?php
$nome
= "Guilherme Rambo";
$local = "S. S. do Caí - RS";
echo $nome;
echo $local;
?>

#6 Goulart

Goulart

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Não informado
  • Localidade:Maricá/RJ

Posted 04/08/2008, 17:38

Pessoal... tudo bem.. eu coloquei a rotina e funcionou.. só tem um problema...
Supondo que só eu esteja acessando o site... quando entro pela 1a. vez no site aparece ZERO para o contador (penso que deveria ser UM)... quando dou um "reload" ... aparece UM... se eu fizer um "reload" mais uma vez... aparece ZERO...
E fica nesse ZERO e UM...
Tem alguma coisa errada... procurei olhar com calma o script mas não consegui achar onde estaria o "erro".. será que o autor poderia me ajudar ??

Edição feita por: Goulart, 04/08/2008, 17:38.

Augusto Goulart - goulart@provsul.com.br
Faça da ProvSUL seu Provedor de Serviços WEB




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq