Ir para conteúdo

Arquivado

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

Tidus

como criar um script de usuario online?

Recommended Posts

Eu ja tentei inumeras vezes fazer um script de usarios online que mostre o record de acesso..mas não consigo algume pode me ensiar ou fazer um para eu ter uma ideiaagradeço desde já...... :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

e que o script esta na minha casa, e eu estou na casa da minha mãe.....a parte de mostar os user on e este aqui so falta a do record<?php$Timeout = "20"; // Time out em minutos$Files['UsersOnline'] = "usersonline.txt";$FileName = $Files['UsersOnline'];if (!file_exists($FileName)) {$File = @fopen("$FileName", "w"); if($File) {if (!eregi("win32", $GLOBALS['SERVER_SOFTWARE'])) {flock($File, 2); } fputs($File, ""); fclose($File); } }// Atualiza a lista$UserOk = false; $NewLines = ""; $Timeout *= 60;$File = file($FileName);foreach ($File as $Line) { list($IP, $LastHit) = explode("|", $Line); if ($IP == $REMOTE_ADDR) {$NewLines .= "$REMOTE_ADDR|". time() ."|\n"; $UserOk = true; } else if ($LastHit + $Timeout > time()) {$NewLines .= $Line; }}if (!$UserOk) {$NewLines .= "$REMOTE_ADDR|". time() ."|\n"; }$File = "";// Salva a lista e ve o numero de usuarios online$File = @fopen("$FileName", "w");if ($File) { if (!eregi("win32", $GLOBALS['SERVER_SOFTWARE'])) {flock($File, 2); } fputs($File, $NewLines); fclose($File); $File = file($FileName); $UsersOnLine = count($File);}else {$UsersOnLine = 0; }$File = "";echo "$UsersOnLine";?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba.. nunca tinha implementado lock de arquivo no php não, legalll essa! B) :D :D Como a função flock() não funciona em partições FAT num dá pra eu testar aqui (to no windows no momento), mas qual teu problema em relação a esse script?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode fazer usando uma logica simples... toda vez que ler a contagem atual de usuários on-line você comparar com o conteudo de um arquivo (esse arquivo vai contar apenas o numero maximo de users online) caso seja maior você grava ele denovo com o novo total. Caso não seja não faça nada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por exemplo, você vai registrar o recorde em um coluna x do mysql, você ve quantos usuarios estão online no momento, se for maior que o valor do campo x ele vai atualizar para a quantidade que tem agora, caso seja menor que o do campo x não vai acontecer nada, é simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois desse seu código ficaria assim:

$sql = "SELECT * FROM tabela"$q = mysql_query($sql);while ($s = mysql_fetch_array($q);$recorde = $s['recorde']; // Esse campo ['recorde'] é o campo do bd que marca o recorde.if ($quantidade_de_usuarios > $recorde) {$d = mysql_query("UPDATE tabela SET recorde='$quantidade_de_usuarios'");// Isso não precisa, mas é melhor pra saber se foi gravado corretamente:if (!$d) {echo "Erro ao atualizar bd";} else {echo "Informação atualizada com sucesso";}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe, faltou algo:

$sql2 = "SELECT * FROM tabela"$q2 = mysql_query($sql2);while ($s2 = mysql_fetch_array($q2);$recorde2 = $s2['recorde'];//E pra aparecer a quantidade de pessoas:echo "O recorde de usuários online é de $recorde2 pessoas";echo "Estão online agora $quantidade_de_usuarios pessoas";

Valew?

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta dando erro você sabe onde é?<?php$Timeout = "20"; // Timeout em minutos$Files['UsersOnline'] = "usersonline.txt";$FileName = $Files['UsersOnline'];if (!file_exists($FileName)) {$File = @fopen("$FileName", "w"); if($File) {if (!eregi("win32", $GLOBALS['SERVER_SOFTWARE'])) {flock($File, 2); } fputs($File, ""); fclose($File); } }// Atualiza a lista$UserOk = false; $NewLines = ""; $Timeout *= 60;$File = file($FileName);foreach ($File as $Line) { list($IP, $LastHit) = explode("|", $Line); if ($IP == $REMOTE_ADDR) {$NewLines .= "$REMOTE_ADDR|". time() ."|\n"; $UserOk = true; } else if ($LastHit + $Timeout > time()) {$NewLines .= $Line; }}if (!$UserOk) {$NewLines .= "$REMOTE_ADDR|". time() ."|\n"; }$File = "";// Salva a lista e ve o numero de usuarios online$File = @fopen("$FileName", "w");if ($File) { if (!eregi("win32", $GLOBALS['SERVER_SOFTWARE'])) {flock($File, 2); } fputs($File, $NewLines); fclose($File); $File = file($FileName); $UsersOnLine = count($File);}else {$UsersOnLine = 0; }$File = "";echo "$UsersOnLine";$sql = "SELECT * FROM tabela"$q = mysql_query($sql);while ($s = mysql_fetch_array($q);$recorde = $s['recorde']; // Esse campo ['recorde'] é o campo do bd que marca o recorde.if ($quantidade_de_usuarios > $recorde) {$d = mysql_query("UPDATE tabela SET recorde='$quantidade_de_usuarios'");// Isso não precisa, mas é melhor pra saber se foi gravado corretamente:if (!$d) {echo "Erro ao atualizar bd";} else {echo "Informação atualizada com sucesso";}$sql2 = "SELECT * FROM tabela"$q2 = mysql_query($sql2);while ($s2 = mysql_fetch_array($q2);$recorde2 = $s2['recorde'];//E pra aparecer a quantidade de pessoas:echo "O recorde de usuários online é de $recorde2 pessoas";echo "Estão online agora $quantidade_de_usuarios pessoas";?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

erro na linha 52.eu coloco um include no site para o useronlie.tenho que criar um useronline.txttb tenho q reicar um recorde.rxt?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe, agora que eu vi, você pegou o código que eu postei e colocou inteirinho do jeito que tava, você tem que mudar a variavel $quantidade_de_usuarios para a que tem a quantidade de usuarios no momento, quanto ao erro: A linha 52 é a que fecha o bloco de comandos php, você deve ter esquecido de fechar algum comando como o if ( {} ), procura aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que a pressa não faz hehe, eu passei algumas coisas erradas (o que estiver em vermelho):

<?php

 

$Timeout = "20"; // Timeout em minutos

 

$Files['UsersOnline'] = "usersonline.txt";

$FileName = $Files['UsersOnline'];

if (!file_exists($FileName)) {$File = @fopen("$FileName", "w"); if($File) {if (!eregi("win32", $GLOBALS['SERVER_SOFTWARE'])) {flock($File, 2); } fputs($File, ""); fclose($File); } }

 

// Atualiza a lista

$UserOk = false; $NewLines = ""; $Timeout *= 60;

$File = file($FileName);

foreach ($File as $Line) {

list($IP, $LastHit) = explode("|", $Line);

if ($IP == $REMOTE_ADDR) {$NewLines .= "$REMOTE_ADDR|". time() ."|\n"; $UserOk = true; }

else if ($LastHit + $Timeout > time()) {$NewLines .= $Line; }

}

if (!$UserOk) {$NewLines .= "$REMOTE_ADDR|". time() ."|\n"; }

$File = "";

 

// Salva a lista e ve o numero de usuarios online

$File = @fopen("$FileName", "w");

if ($File) {

if (!eregi("win32", $GLOBALS['SERVER_SOFTWARE'])) {flock($File, 2); } fputs($File, $NewLines); fclose($File);

$File = file($FileName); $UsersOnLine = count($File);

}

else {$UsersOnLine = 0; }

$File = "";

 

echo "$UsersOnLine";

 

$sql = "SELECT * FROM tabela"

$q = mysql_query($sql);

while ($s = mysql_fetch_array($q) { // Tinha esquecido de abrir o while hehe

$recorde = $s['recorde']; // Esse campo ['recorde'] é o campo do bd que marca o recorde.

if ($quantidade_de_usuarios > $recorde) {

$d = mysql_query("UPDATE tabela SET recorde='$quantidade_de_usuarios'");

} // Faltava fechar um if

// Isso não precisa, mas é melhor pra saber se foi gravado corretamente:

if (!$d) {

echo "Erro ao atualizar bd";

} else {

echo "Informação atualizada com sucesso";

}

} //e Fechar o while hehe

$sql2 = "SELECT * FROM tabela"

$q2 = mysql_query($sql2);

while ($s2 = mysql_fetch_array($q2);

$recorde2 = $s2['recorde'];

//E pra aparecer a quantidade de pessoas:

echo "O recorde de usuários online é de $recorde2 pessoas";

echo "Estão online agora $quantidade_de_usuarios pessoas";

 

?>

Acho que é isso, testa aí, :huh: .

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.