La mayoría de las páginas web hoy en día, necesitan saber cuantas personas visitan su página. Lo normal es tener un simple contador; ahora se necesitan más detalles y uno de esto es cuantos usuarios tienes en un cierto momento tú página.
Esta es una clase que utilizas para poder contar la cantidad de usuarios activos que tienes en tu página web. De esta manera saber que tan popular va tu site en ciertas horas. Ademas es bueno siempre saber la cantidad de personas en linea, como webmaster motiva a trabajar mas en una pagina cuando vez muchas personas interesadas en tu obra maestra.
Crea la Tabla
Antes de todo necesitamos tener la tabla donde se va almacenar todo la información de nuestros usuarios en linea. ¿Porque no un archivo plano? pues porque es mas facil manejarlo con la base de datos.
Codigo:
1 2 3 4 5 6 7 8 9 10
|
<?php
CREATE TABLE `useronline` (
`id` int(10) NOT NULL auto_increment,
`ip` varchar(15) NOT NULL default '',
`timestamp` varchar(15) NOT NULL default '',
`localtion` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
?>
|
usersOnlineMain.php - PHP5
Ahora que tenemos nuestra tabla creada lo unico que nos falta es nuestra clase que va a controlar todo para el manejo de los usuarios en linea. Conste que esta version es en PHP5
Codigo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
<?php
/**
* UserOnline Class
*
* clases para saber los usuarios en linea
*
*/
class usersOnlineMain
{
private $timestamp;
private $timeout = 300;
private $count = 0;
private $url;
/**
* Constructor que inicializa todo para comenzar a contar usuarios en linea
*
* @param mysqli $db
*/
function __construct()
{
$this->timestamp = time();
$this->ip = $this->ipCheck();
$this->url = $_SERVER[REQUEST_URI];
$this->new_user();
$this->delete_user();
$this->count_users();
}
/**
* Esta funcion trata de sacar todoo los usuarios no importa si vienen de un proxy, y pork es importante?
* ya que si todos tus users vienen de un proxy los contario como 1 solo usuario
*
* @return string
*/
private function ipCheck()
{
if (getenv('HTTP_CLIENT_IP'))
{
$ip = getenv('HTTP_CLIENT_IP');
}
elseif (getenv('HTTP_X_FORWARDED_FOR'))
{
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_X_FORWARDED'))
{
$ip = getenv('HTTP_X_FORWARDED');
}
elseif (getenv('HTTP_FORWARDED_FOR'))
{
$ip = getenv('HTTP_FORWARDED_FOR');
}
elseif (getenv('HTTP_FORWARDED'))
{
$ip = getenv('HTTP_FORWARDED');
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
/**
* Agrega un nuevo usuario en linea
*
* @return null;
*/
private function new_user()
{
$query = mysql_query("INSERT INTO useronline (ip, timestamp, localtion) VALUES ('$this->ip', '$this->timestamp', '$this->url')");
}
/**
* Borra a los usuarios en linea despues que se paso el tiempo limite de ellos
*
* @return null;
*/
private function delete_user()
{
$query = mysql_query("DELETE FROM useronline WHERE timestamp < ($this->timestamp - $this->timeout)");
}
/**
* Cuenta la cantidad de usuarios en linea
*
* @return int
*/
public function count_users()
{
$result = mysql_query("SELECT count(DISTINCT ip) FROM useronline ");
$count = mysql_fetch_row($result);
return $count[0];
}
}
?>
|
usersOnlineMain.php - PHP4
Ahora que tenemos nuestra tabla creada lo unico que nos falta es nuestra clase que va a controlar todo para el manejo de los usuarios en linea. Conste que esta version es en PHP4
Codigo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
<?php
/**
* UserOnline Class
*
* clases para saber los usuarios en linea
*
*/
class usersOnlineMain
{
private $timestamp;
private $timeout = 300;
private $count = 0;
private $url;
/**
* Constructor que inicializa todo para comenzar a contar usuarios en linea
*
* @param mysqli $db
*/
function usersOnlineMain()
{
$this->timestamp = time();
$this->ip = $this->ipCheck();
$this->url = $_SERVER[REQUEST_URI];
$this->new_user();
$this->delete_user();
$this->count_users();
}
/**
* Esta funcion trata de sacar todoo los usuarios no importa si vienen de un proxy, y pork es importante?
* ya que si todos tus users vienen de un proxy los contario como 1 solo usuario
*
* @return string
*/
function ipCheck()
{
if (getenv('HTTP_CLIENT_IP'))
{
$ip = getenv('HTTP_CLIENT_IP');
}
elseif (getenv('HTTP_X_FORWARDED_FOR'))
{
$ip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_X_FORWARDED'))
{
$ip = getenv('HTTP_X_FORWARDED');
}
elseif (getenv('HTTP_FORWARDED_FOR'))
{
$ip = getenv('HTTP_FORWARDED_FOR');
}
elseif (getenv('HTTP_FORWARDED'))
{
$ip = getenv('HTTP_FORWARDED');
}
else
{
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
/**
* Agrega un nuevo usuario en linea
*
* @return null;
*/
function new_user()
{
$query = mysql_query("INSERT INTO useronline (ip, timestamp, localtion) VALUES ('$this->ip', '$this->timestamp', '$this->url')");
}
/**
* Borra a los usuarios en linea despues que se paso el tiempo limite de ellos
*
* @return null;
*/
function delete_user()
{
$query = mysql_query("DELETE FROM useronline WHERE timestamp < ($this->timestamp - $this->timeout)");
}
/**
* Cuenta la cantidad de usuarios en linea
*
* @return int
*/
function count_users()
{
$result = mysql_query("SELECT count(DISTINCT ip) FROM useronline ");
$count = mysql_fetch_row($result);
return $count[0];
}
}
?>
|
Como Usarlo
Ya tenemos nuestra tabla para almacenar la info del usuario, tenemos nuestra clase para manejar la entrada de info del usuario y ahora como lo desplegamos en la pagina? facil
Codigo:
1 2 3 4 5 6 7 8
|
<?php
include("usersOnlineMain.php ");
$usersOnline = new usersOnlineMain();
$online = number_format($usersOnline->count_users(),0,'.',',');
echo "<li>Usuarios en Linea: $online</li>";
?>
|