Visitantes online

ivana7474
28 de Febrero del 2004
cómo se puede hacer para mostrar en la web los visitantes que están viendo el sitio en un momento dado.
(o sea que muestre un texto que diga visitantes online xx)

Covi
28 de Febrero del 2004
No recuerdo de donde bajé este script, creo que phpargentina o algo así, sorry, ah.. es de libre distribución.

Yo te lo pongo y tu ya luego ves como va:
Primero la clase:

<code>
<?php

class Usuariosenlinea
{
/*
* @param string $servidor el host para conectar, usualmente localhost
* @param string $basededatos el nombre de la base de datos
* @param string $nombredb el nombre de la tabla, preferentemente no editar
* @param string $usuario usuario de la base de datos
* @param string $pass la contraseña de la base de datos
*/

var $servidor = 'tuserver';
var $basededatos = 'tudb';
var $nombredb = 'usuariosenlinea';
var $usuario = 'user';
var $pass = 'pass';
## Fin de Conexion ##

var $e_rror;
//Segundos para borrar de la base de datos a los usuarios inactivos
var $segundos = 120;
var $ahora = 0;

//CONSTRUCTOR
function Usuariosenlinea() {

$this->recargar();

}

function cuantos() {

return $this->ahora;

}

function enlinea() {

if($this->ahora == 1) {

echo'<p>Usuarios en línea: '. $this->ahora ."<br />";
}
else
{
echo'<p>Usuarios en línea: '. $this->ahora ."<br />";
}

}

function ipreal(){

if ($real_ip = getenv('HTTP_X_FORWARDED_FOR')){

$explode_real_ip = explode(",", $real_ip);
return trim($explode_real_ip[0]);
}
else
{
return getenv('REMOTE_ADDR');
}
}

function error(){

return $this->e_rror = mysql_error();

}

function recargar() {

$tiempo_actual = time();
$tiempo_final = $tiempo_actual - $this->segundos;
$ip = $this->ipreal();

@mysql_connect($this->servidor, $this->usuario, $this->pass)
or die('<p>Error al Intentar Conectar con la base de datos</p> '.$this->error().'');

@mysql_select_db($this->basededatos)
or die('<p>Error Seleccionando la base de datos</p> '.$this->error().'');

$result = mysql_query("SELECT ip FROM $this->nombredb WHERE ip='$ip'")
or die('<p>Error de lectura en la base de dato</p>s '.$this->error().'');

if(mysql_num_rows($result) == 0){

mysql_query("INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')")
or die('<p>Error al Insertar en la base de datos</p> '.$this->error().'');

}
else

{
mysql_query("UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'")
or die('<p>Error al Insertar en la base de datos</p> '.$this->error().'');
}

mysql_query("DELETE FROM $this->nombredb WHERE timestamp < $tiempo_final")
or die('<p>Error al intentar borrar en la base de datos</p> '.$this->error().'');

$result = mysql_query("SELECT ip FROM $this->nombredb")
or die('<p>Error de lectura en la base de datos</p> '.$this->error().'');

$this->ahora = mysql_num_rows($result);

mysql_close();

}

}

?>
</code>
lo guardas como class.online.php o ya tu mismo si lo cambias. Cuidado eh, yo he introducido cambios de formato en los mensajes que se completan con otros archivos, que es una tonteria pero te podría fallar por algo y te vuelves gilipollas buscando que es.

Y esto ya en donde quieras que salga:
<code>
// Usuarios en línea, escribiebndo en db
include("class.online.php");

$enlinea = new Usuariosenlinea();
$enlinea->enlinea();
//
</code>

Un saludo, espero te sirva.