Desarrollo Web
Usuarios activos con PHP
Vamos a explicar cómo contar usuarios activos con PHP.
En esta ocasión no usaremos
ninguna BD, usaremos un archivo llamado usuarios.dat
Entonces, vamos a crear nuestro script PHP y lo llamamos activos.php
<?php $tiempo_logout = 600; // segundos tras los cuales un usuario es marcado como inactivo $arr = file("usuarios.dat"); $contenido = $REMOTE_ADDR.":".time()." "; for ( $i = 0 ; $i < sizeof($arr) ; $i++ ) { $tmp = explode(":",$arr[$i]); if (( $tmp[0] != $REMOTE_ADDR ) && (( time() - $tmp[1] ) < $tiempo_logout )) { $contenido .= $REMOTE_ADDR.":".time()." "; } } $fp = fopen("usuarios.dat","w"); fputs($fp,$contenido); fclose($fp); $array = file("usuarios.dat"); $USUARIOS_ACTIVOS = count($array); ?>
Bueno, explicamos
paso a paso lo que hace el script:
- Lo primero es sacamos el usuarios.dat a un array
- Creamos el archivo de
texto con las IP y la hora de visita de los que visitan nuestra web - “Borramos” de ese archivo los que llevan más de $tiempo_logout
sin actividad - Escribimos el fichero
- Declaramos una variable $USUARIOS_ACTIVOS que contiene el número de usuarios activos del momento
- Jeje….así de sencillo 😉
- La forma de utilizar el Script, es muy sencilla, al principio
de cualquier página de tu web, pones <?php
include(“activos.php”) ?> y donde quieras mostrar el número
de usuarios, usas la variable $USUARIOS_ACTIVOS.
Documento redactado por Ferdy apoyado en el código original de Eric
para Maestros del Web
Oye yo ya tengo todo..lo que me dices pero no me funciona…solo me aparece que estan activos “1”…ups…help
[email protected]
solo me aparece 1
no pasa nada…
no se como realizar el punto dat exactamente
Bueno primero que halgo mas, les felicito por su excelente web. Por otra parte, quisiera saber realmente como funciona este script, porque al estar conectado a nuestra pagina solo aparece 1 usuario conectado y lo probamos con tres maquinas a la ves. Tiene que ver con que nuestra pagina este elaborada con varios frames y este contador no este colocado en el main?, si alguien tiene la respuesta o posiblemente ese mal, les agradeceria su ayuda. Gracias y cuidense mucho. Ralph Triton
no pasa nada plop
No es correcto. Pero es una guia.
oigan a my tambien me pasa lo mismo solo me muestra 1 usuario navegando cuando hemos entrado 4 personas a la ves de distintos paises..
la pagina tiene un iframe pero el script no se ejecuta dentro del iframe acaso sera por eso…
podria alguien responder a nuestras dudas ya que veo que a otros les pasa lo mismo…
_Saludos…
No Puede Ser Que Publiquen Algo Que No Funciona!!!!! Baja Mucho El Nivel De La Pagina Eso!!!! Que Desastre!!!
Osea….ponganse Media Pila Y Publiquen Algo Que Funcione!!!!
Bueno amigos esto esta mas que probado y funciona,
eh retomado algunos metodos y le he aplicado algunos cambios. lo primero que tenemos que hacer es crear una tabla que contenga los siguientes campos,
1.- ip con campo varchar (15)
2.- ips con campo varchar (15)
Nota: este campo es opcional pero ojo ala hora de las sentencias SQL quitenselo.
3.-fecha int(10)
Una vez creada la base de datos procedamos al lo primordial, el codigo php
< ?php
//haciendo conexion con la base de datos
require_once(“conexion.php”);
validar_conexion_fns();
//obteniendo la ip del usuario.
if(getenv(“HTTP_X_FORWARDED_FOR”))
{
$ip = getenv(“HTTP_X_FORWARDED_FOR”);
$client = gethostbyaddr($_SERVER[‘HTTP_X_FORWARDED_FOR’]);
addslashes($ip);
}
else
{
$ip = getenv(“REMOTE_ADDR”);
$client = gethostbyaddr($_SERVER[‘REMOTE_ADDR’]);
addslashes($ip);
}
$str = preg_split(“/\./”, $client);
$i = count($str);
$x = $i – 1;
$n = $i – 2;
$isp = $str[$n] . “.” . $str[$x];
/* Muestra la ip y el isp del usuario
echo ‘
Tu ISP: ‘.$isp.’
‘; */
//Determinar la hora actual.
$time_now = time() + 1440;
//Eliminar las ip incativas despues de 24 minutos.
$time_out = time();
$sql=”DELETE FROM ip_usuarios WHERE fecha < '$time_out'";
$result=mysql_query($sql);
//Ver si una ip existe, si existe la atualizamos, si no la creamos.
$sql2=”SELECT * FROM ip_usuarios WHERE ip=’$ip'”;
$result2 = mysql_query($sql2);
$row = mysql_num_rows($result2);
if($row != 0)
{
$sql3=”update ip_usuarios SET fecha=’$time_now’ isp=’$isp’ WHERE ip=’$ip'”;
}
else
{
$sql3=”INSERT INTO ip_usuarios(ip,isp,fecha) VALUES (‘$ip’,’$isp’,’$time_now’)”;
}
$result3 = mysql_query($sql3);
//Seleccionar las ip para contabilizar los usuarios.
$sql4=”SELECT ip FROM ip_usuarios”;
$result4=mysql_query($sql4);
//Mostramos los usuarios que hay conectados ala pagina en este momento.
$usuarios=mysql_num_rows($result4);
/*
Cual quier duda o comentario escriban a [email protected] con gusto atendere sus dudas.
*/
?>
No creo que haga flata explicar el codigo, creo que tiene los comentarios suficientes para entenderle, pero si aun tienen dudas envienme un mail e se los explicare mas a detalle ya que ando corto de tiempo.
espero y les sirva ATTE:GEORGE
a los que le sale no mas de uno es que nesesitan ponerlo en el servidor probarlo y esperar a que marque mas de dos para ver si funciona realmente.
Si no? pueden leer un poco mas de TCP/IP para mas información
XD es poquito XD XD
Funciona bien. Super.
Dale un chmod 777 file.dat
// http://albertux.fime.uanl.mx //
Solo muestra un usuario por un error en el codigo, se debe forzar el retorno del carro para que funcione, asi:
$contenido = $REMOTE_ADDR.”:”.time().”\n”;
de otro modo todos los datos se grabaran en una sola linea y no en un arreglo!
ami tp me funciona, y lo ice exactamente como explican.
Solo me sale 1 usuario, he probado con 3 pcs a la misma vez, de amigos, y nada, solo sale 1 usuario. Ademas esta colocado en el main de la pagina.
Aja pero :S como se hace la variable esa de $USUARIOS_ACTIVOS ???
// http://www.jalando.com //
Voz y Canto, Interpretación y Acento. Coaching de Actores y Cantantes.
Y donde se pone ese codigo???
// http://yoshimaker.tk //
esto vale callampa
a mi tambien me aparece 1 no capto alquien puede colaborarme..
Se ve directamente que el count($array) lo hace a $array la cual no se usa en ningun momento.
Es un buen inicio.
Por lo otro, senzillo y potente. Felicidades.
yO tENGO eL mISMO pROBLEMA, sOLO mE sALE uN uSUARIO aCTIVO. eNTONCES eSTA mAL eSE sCRIPT?.
donde dice:
if (( $tmp[0] != $REMOTE_ADDR ) && (( time() – $tmp[1] ) < $tiempo_logout ))
{
$contenido .= $REMOTE_ADDR.”:”.time().” “;
}
}
ha de poner:
if (( $tmp[0] != $REMOTE_ADDR ) && (( time() – $tmp[1] ) < $tiempo_logout ))
{
$contenido .= $tmp[0].”:”.time().” “;
}
}
corregido, este si me funciona:
<?php
define(“USUARIOS_DATA_FILE”,”usuarios.data”);
$tiempo_logout = 600; // segundos tras los cuales un usuario es marcado como inactivo
$arr = @file(USUARIOS_DATA_FILE);
$contenido = $_SERVER[‘REMOTE_ADDR’].”:”.time().”\n”;
for ( $i = 0 ; $i < sizeof($arr) ; $i++ )
{
$tmp = explode(“:”,$arr[$i]);
if (( $tmp[0] != $_SERVER[‘REMOTE_ADDR’] ) && (( time() – $tmp[1] )
nota: hay que tener permisos de escritura en usuarios.data.