"Super contador de Visitas en PHP"=300MB SQL+4 millones de registros+Scripts

Iniciado por Graphixx, 30 Diciembre 2010, 21:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Graphixx

El proyecto va asi:
http://www.sistemasycontroles.net/ip/

La idea es lograr algo asi:
http://live.feedjit.com/live/hackplayers.com/0/

Puedes descargar todos los archivos del proyecto aca:
graphixx_contador_de_visitas_php.zip (9.56 MB)

Las bases de datos con las IP mundiales aca:
http://foro.elhacker.net/desarrollo_web/descarga_14_mil_dolares_en_bases_de_datos_del_proyecto_del_contador_php-t367571.0.html   

EL paquete incluye:





La base de datos con los rangos ip de todo el mundo la saque de:
http://ipinfodb.com/ip_database.php




Descargar la base de datos de ip mundiales de:
http://www.megaupload.com/?d=NJZHXD5S

Aqui tambien estan compiladas como usar todas las bd gratis que hay en un solo recurso:
http://bakery.cakephp.org/spa/articles/dereklio/2010/10/11/geoip_de_origen_de_datos_collection_-_maxmind_wipmania_ipinfodb_-_muchos_proveedores_geoip_para_usted_para_elegir

las banderas animadas estan en:
Espectaculares Banderas de todos los paises en GIF.

Por implementar:
La idea es implementar una tabla de estadisticas como esta:
http://live.feedjit.com/live/coltandecolombia.com/0/

Para implementarle tambien un globo 3d tipo revolver maps, gracias a que la base de datos entrega las coordenadas cartesianas, asi:
http://www.revolvermaps.com/?target=enlarge&i=yaZ8Wt55df&wid=1&nostars=true&color=ff0000&m=2&ref=http%3A%2F%2Fwww.sistemasycontroles.net%2F

El codigo hasta el momento va:
Código (php) [Seleccionar]

<?php
include "conexiondb.php";

$ip $_SERVER['REMOTE_ADDR']; $separar explode('.',$ip);
print(
"IP: $ip<br>");
echo 
"1er rango: ".$separar[0]."<br>";
echo 
"2do rango: ".$separar[1]."<br>";
echo 
"3do rango: ".$separar[2]."<br>";
echo 
"4to rango: ".$separar[3]."<br>";

list(
$a$b$c$d) = $separar;

$ip2 =  (($a*256+$b)*256+$c)*256 $d;
echo 
"ip cifrada:".$ip2."<br>";

$connect=Conectarse(); 
$ssql "SELECT * FROM `ip_group_city` where `ip_start` <= '$ip2' order by ip_start desc limit 1";
$consulta mysql_query($ssql,$connect); 
mysql_close($connect);

if( 
mysql_num_rows($consulta) == 1) {
$array mysql_fetch_array($consulta);
$_country_code $array["country_code"];
$_country_name $array["country_name"];
$_region_code $array["region_code"];
$_region_name $array["region_name"];
$_city $array["city"];
$_latitude $array["latitude"];
$_longitude $array["longitude"];

echo "Codigo del Pais:".$_country_code."<br>";
echo "Nombre del Pais:".$_country_name."<br>";
echo "Codigo de region:".$_region_code."<br>";
echo "Nombre de la Region:".$_region_name."<br>";
echo "ciudad:".$_city."<br>";
echo "latitud:".$_latitude."<br>";
echo "longitud:".$_longitude."<br>";
$lstring strtolower($_country_code);
echo "<img src=banderas_iso3166/".$lstring.".GIF border=0><br>";

mysql_free_result($consulta);
//header( "Location: bienvenido.php" );
} else {
mysql_free_result($consulta);
//header( "Location: portada.php" );


$nav=$_SERVER['HTTP_USER_AGENT']; // guardo en la variable el Navegador
echo "navegador: "."$nav"."<br>"// muestro la variable con el Navegador
?>

<?php
//preg_match().
if ((preg_match('/'."Nav".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Gold".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."X11".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Mozilla".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Netscape".'/'$_SERVER["HTTP_USER_AGENT"])) AND (!preg_match('/'."MSIE".'/'$_SERVER["HTTP_USER_AGENT"])) AND (!preg_match('/'."Chrome".'/'$_SERVER["HTTP_USER_AGENT"])) AND (!preg_match('/'."Konqueror".'/'$_SERVER["HTTP_USER_AGENT"])) AND (!preg_match('/'."Firefox".'/'$_SERVER["HTTP_USER_AGENT"]))) $browser "Netscape";
elseif(
preg_match('/'."Firefox".'/'$_SERVER["HTTP_USER_AGENT"])) $browser "FireFox";
elseif(
preg_match('/'."MSIE".'/'$_SERVER["HTTP_USER_AGENT"])) $browser "MSIE";
elseif(
preg_match('/'."Chrome".'/'$_SERVER["HTTP_USER_AGENT"])) $browser "Chrome";
elseif(
preg_match('/'."Lynx".'/'$_SERVER["HTTP_USER_AGENT"])) $browser "Lynx";
elseif(
preg_match('/'."Opera".'/'$_SERVER["HTTP_USER_AGENT"])) $browser "Opera";
elseif(
preg_match('/'."WebTV".'/'$_SERVER["HTTP_USER_AGENT"])) $browser "WebTV";
elseif(
preg_match('/'."Konqueror".'/'$_SERVER["HTTP_USER_AGENT"])) $browser "Konqueror";
elseif((
preg_match('/'."bot".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Google".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Slurp".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Scooter".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Spider".'/'$_SERVER["HTTP_USER_AGENT"])) || (preg_match('/'."Infoseek".'/'$_SERVER["HTTP_USER_AGENT"]))) $browser "Bot";
else 
$browser "Other";
echo 
"EL navegador es: ".$browser;
?>

<center>
<?php
$url
=$_SERVER['HTTP_REFERER'];
echo 
'<strong>'."viene de(ruta completa): ".'</strong>'.$_SERVER['HTTP_REFERER'].'<br />';

preg_match'@^(?:http://)?([^/]+)@i'$_SERVER['HTTP_REFERER'], $matches );
$host $matches[1]; 

echo 
'<strong>'."viene de(dominio): ".'</strong>'.$host;
?>

</center>
<center>
<?php
function get_search($referer)
{
preg_match("/q=(.*?)&/"$referer$a);
$b urldecode(str_replace("+"," "$a[1]));
return $b;
}
 
 
if(
stristr($_SERVER['HTTP_REFERER'],'google')){
print '<strong>la busqueda de:</strong> '.get_search($_SERVER['HTTP_REFERER']);
print ' <strong>te ha traido hasta este sitio.</strong>';
}
?>

</center>
<?PHP
// example of basic use

// set directory path to where the ip2countryphp.sql.php file is
// this MUST be a relative path and MUST include the end slash /
define("BASEDIR","./");

// set width of flag, height is proportional to width.
$flag_width = "30";

// include the class file
include(BASEDIR."ip2countryphp.sql.php");

/*
Below is a heredoc example of how you might display the users info,
of course you can include only the variables you want to, or you might
want to store the ip address, 2 letter country code(for flag image) and
country name in a database for using on a specific page.
*/
$gifflag = "banderas/".$country_name.".GIF";
print <<<TEST
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Visit Site Counter</title>
</head>
<body style="font:normal 9pt tahoma,arial,verdana">
<table style="margin-top:20px;border:#CCCCCC 1px solid" width="320" cellspacing="2" cellpadding="3" border="0" align="center">
 <tr><td bgcolor="#CCCCCC" colspan="2">&nbsp;<font color="white">Visit Site Counter</font></td></tr>
 <tr><td width="200" height="26">Direccion IP:</td><td>$ip_address</td></tr>
 <tr><td>Nombre del Pais:</td><td>$country_name</td></tr>
 <tr><td>Codigo de 2 letras:</td><td>$two_letter_code</td></tr>
 <tr><td>Codigo de 3 letras:</td><td>$three_letter_code</td></tr>
 <tr><td>Bandera del Pais:</td><td><img src="$flag_img" width="$flag_width" border="0"></td></tr>
 <tr><td>Bandera del Pais:</td><td><img src="$gifflag" border="0"></td></tr>
 <tr><td bgcolor="#CCCCCC" colspan="2"><font color="white" size="1">www.eventosysistemas.com</font></td></tr>
</table>
</body>
</html>
TEST;
exit;
?>


Añadido al proyecto la libreria para dibujar en un mapa global las visitas:
GIS mapping in PHP: Part 1
Plotting a longitude / latitude coordinate on a raster map of the world using PHP and GD.
http://www.web-max.ca/PHP/article_1.php
GIS mapping in PHP: Part 2
Loading vector data in from a Mapinfo MIF file and displaying it in an image using PHP and GD.
http://www.web-max.ca/PHP/article_2.php
GIS mapping in PHP: Part 3
Retrieving user selected longitude and latitude coordinates from a raster map of the world.
http://www.web-max.ca/PHP/article_3.php
GIS mapping in PHP: Part 4
Stepping back in time, we show how to plot more than one point on a raster map of the world, loading data from a simple text file.
http://www.web-max.ca/PHP/article_4.php




proyecto logrado gracias a:
http://en.wikipedia.org/wiki/Mercator_projection

Para tornar el mapa 3d usar:
http://www.uff.br/mapprojections/Mercator_en.html



Pido ayuda con esto:

COdigo del referer:
<?php
$url
=$_SERVER['HTTP_REFERER'];
echo 
'<strong>'."viene de(ruta completa): ".'</strong>'.$_SERVER['HTTP_REFERER'].'<br />';

preg_match'@^(?:http://)?([^/]+)@i'$_SERVER['HTTP_REFERER'], $matches );
$host $matches[1]; 

echo 
'<strong>'."viene de(dominio): ".'</strong>'.$host;
?>

Alguien sabe como optener hacia que pagina parte el usuario?, el contrario de HTTP_REFERER....?

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

#!drvy

Lo primero no lo veo posible a no ser que el propio link hacia el que va a partir el usuario no este indicado en tu propia pagina.

Lo segundo,  segun he entendido queres saber lo que buscaba el usuario mediante el referer o algo asi no ?

seria parecido a esto:
Código (php) [Seleccionar]

<?php
function get_search($referer)
{
preg_match("/q=(.*?)&/"$referer$a);
$b str_replace("+"," "$a[1]);
return $b;
}

if(
stristr($_SERVER['HTTP_REFERER'],'google')){
print '<strong>Bienvenido, la busqueda de:</strong> '.get_search($_SERVER['HTTP_REFERER']);
print ' <strong>te ha traido hasta este sitio. Gracias por visitarme =).</strong>';
}
?>



Saludos

Graphixx

Gracias drvy | BSM justo lo que andaba buscando e Incluire para optener la ip una funcion que posteo el compañero cuántico:
Código (php) [Seleccionar]

<?php 

function getIP() { 
    if (isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) { 
       
$ips $_SERVER['HTTP_X_FORWARDED_FOR']; 
    }  
    elseif (isset(
$_SERVER['HTTP_VIA'])) { 
       
$ips $_SERVER['HTTP_VIA']; 
    }  
    elseif (isset(
$_SERVER['REMOTE_ADDR'])) { 
       
$ips $_SERVER['REMOTE_ADDR']; 
    } 
    else {  
       
$ips "unknown"
    } 
     
    echo 
"Tu IP es: $ips"



 if (isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) { 
       
$ip1 $_SERVER['HTTP_X_FORWARDED_FOR']; 
    }  
    elseif (isset(
$_SERVER['HTTP_VIA'])) { 
       
$ip1 $_SERVER['HTTP_VIA']; 
    }  
    elseif (isset(
$_SERVER['REMOTE_ADDR'])) { 
       
$ip1 $_SERVER['REMOTE_ADDR']; 
    } 
    else {  
       
$ip1 "unknown"
    } 
?>


Se llama asi:
Código (php) [Seleccionar]

<?php
getIP
();
?>
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

#!drvy

Hola =)
No te recomiendo usar HTTP_X_FORWARDED_FOR. Pues serviría para obtener el proxy (al igual que HTTP_VIA) ( en caso de que el cliente use tal) pero es fácilmente modificable mediante los headers del navegador.

En todo caso usar únicamente REMOTE_ADDR te bastaría a no ser que quieras comprobar si el cliente usa proxy y en tal caso indicarlo.



Saludos

Graphixx

Cita de: drvy | BSM en 31 Diciembre 2010, 16:58 PM
Lo primero no lo veo posible a no ser que el propio link hacia el que va a partir el usuario no este indicado en tu propia pagina.

Lo segundo,  segun he entendido queres saber lo que buscaba el usuario mediante el referer o algo asi no ?

seria parecido a esto:
Código (php) [Seleccionar]

<?php
function get_search($referer)
{
preg_match("/q=(.*?)&/"$referer$a);
$b str_replace("+"," "$a[1]);
return $b;
}

if(
stristr($_SERVER['HTTP_REFERER'],'google')){
print '<strong>Bienvenido, la busqueda de:</strong> '.get_search($_SERVER['HTTP_REFERER']);
print ' <strong>te ha traido hasta este sitio. Gracias por visitarme =).</strong>';
}
?>



Saludos

COmpa mira lo que me devuelve el code que posteaste:
Bienvenido, la busqueda de: http%3A%2F%2Fsistemasycontroles.net%2Fip te ha traido hasta este sitio. Gracias por visitarme =).

los : salen como "%3" y el / sencillo como "%2F"

Para lo de las palabras claves de busqueda en google con las que llegaron a la web, creo y va ser mejor usar:
http://www.phpclasses.org/package/4383-PHP-Extract-keywords-used-to-search-in-the-site-Google.html

Código (php) [Seleccionar]

<?php
function GoogleQuery ()
{

//Comprobamos que la pagina referente pertenece a Google
if (strpos ($_SERVER["HTTP_REFERER"], "google"))
{

//Almacenamos en la variable $string el contenido de la variable $_SERVER["HTTP_REFERER"]
$string $_SERVER["HTTP_REFERER"];

//Inicialimamos a 0 el valor de la variable que nos indicara la longitud de la cadena contenida en la variable q.
$longQuery 0;

// — Encontramos la variable q y su final delimitado por &
for ($i=0$i strlen ($string); $i++){
if (
$string[$i] == 'q')
{
for (
$n=$i$n strlen ($string) ;$n++)
{
if (
$string[$n] == '&')
{
// — Extraemos la subcadena a partir de las posiciones de (inicio)$i+2 [excluimos 'q='] y (fin)$n-2 [adelantamos 2 posiciones el final de la cadena resultante]
$q substr ($string$i+2$longQuery-2);
break;
}
$longQuery ++;
}
break;

}

}

//reemplazamos los símbolos + por espacios en blanco
$q str_replace('+',' ',$q);

}

return 
$q;

}

//Mostramos el resultado haciendo una llamada a la función
echo GoogleQuery ();
?>


ya probe esta funcion y retorna lo mismo  :rolleyes:
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

Graphixx

Intente cuadrarlo asi:
Código (php) [Seleccionar]

<?php
function get_search($referer)
{
preg_match("/q=(.*?)&/"$referer$a);
$b str_replace("+"," "$a[1]);
$b str_replace("%3A",":"$a[1]);
$b str_replace("%2F","/"$a[1]);
return $b;

}
 
if(
stristr($_SERVER['HTTP_REFERER'],'google')){
print '<strong>Bienvenido, la busqueda de:</strong> '.get_search($_SERVER['HTTP_REFERER']);
print ' <strong>te ha traido hasta este sitio. Gracias por visitarme =).</strong>';
}
?>


pero me mostro:
Bienvenido, la busqueda de: http%3A//www.sistemasycontroles.net/ip te ha traido hasta este sitio. Gracias por visitarme =).

No tomo el $b = str_replace("%3A",":", $a[1]); , Alguien sabe por que ?
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

#!drvy

Hola, no tiene sentido usar un code tan largo para hacer lo mismo xD
Simplemente usa urldecode.

Algo asi:

Código (php) [Seleccionar]

<?php
function get_search($referer)
{
preg_match("/q=(.*?)&/"$referer$a);
$b urldecode(str_replace("+"," "$a[1]));
return $b;
}


if(
stristr($_SERVER['HTTP_REFERER'],'google')){
print '<strong>Bienvenido, la busqueda de:</strong> '.get_search($_SERVER['HTTP_REFERER']);
print ' <strong>te ha traido hasta este sitio. Gracias por visitarme =).</strong>';
}
?>


con lo que la busqueda de:
http://www.google.com/search?hl=en&source=hp&biw=1280&bih=923&q=http%3A%2F%2Fsistemasycontroles.net%2Fip&btnG=Google+Search&aq=f&aqi=m1&aql=&oq=&gs_rfai=

te daria:
Bienvenido, la busqueda de: http://sistemasycontroles.net/ te ha traido hasta este sitio. Gracias por visitarme =).


Saludos

Graphixx

Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

Graphixx

Para identificar los navegadores:
Código (php) [Seleccionar]

<?php
if ((ereg("Nav"$_SERVER["HTTP_USER_AGENT"])) || (ereg("Gold"$_SERVER["HTTP_USER_AGENT"])) || (ereg("X11"$_SERVER["HTTP_USER_AGENT"])) || (ereg("Mozilla"$_SERVER["HTTP_USER_AGENT"])) || (ereg("Netscape"$_SERVER["HTTP_USER_AGENT"])) AND (!ereg("MSIE"$_SERVER["HTTP_USER_AGENT"])) AND (!ereg("Chrome"$_SERVER["HTTP_USER_AGENT"])) AND (!ereg("Konqueror"$_SERVER["HTTP_USER_AGENT"])) AND (!ereg("Firefox"$_SERVER["HTTP_USER_AGENT"]))) $browser "Netscape";
elseif(
ereg("Firefox"$_SERVER["HTTP_USER_AGENT"])) $browser "FireFox";
elseif(
ereg("MSIE"$_SERVER["HTTP_USER_AGENT"])) $browser "MSIE";
elseif(
ereg("Chrome"$_SERVER["HTTP_USER_AGENT"])) $browser "Chrome";
elseif(
ereg("Lynx"$_SERVER["HTTP_USER_AGENT"])) $browser "Lynx";
elseif(
ereg("Opera"$_SERVER["HTTP_USER_AGENT"])) $browser "Opera";
elseif(
ereg("WebTV"$_SERVER["HTTP_USER_AGENT"])) $browser "WebTV";
elseif(
ereg("Konqueror"$_SERVER["HTTP_USER_AGENT"])) $browser "Konqueror";
elseif((
eregi("bot"$_SERVER["HTTP_USER_AGENT"])) || (ereg("Google"$_SERVER["HTTP_USER_AGENT"])) || (ereg("Slurp"$_SERVER["HTTP_USER_AGENT"])) || (ereg("Scooter"$_SERVER["HTTP_USER_AGENT"])) || (eregi("Spider"$_SERVER["HTTP_USER_AGENT"])) || (eregi("Infoseek"$_SERVER["HTTP_USER_AGENT"]))) $browser "Bot";
else 
$browser "Other";
echo 
"EL navegador es: ".$browser;
?>
Nada tiene fin solo hay pequeñas pausas, pausas que determinan el comienzo de otros. Graphixx
Mi blog

~ Yoya ~

Te recomiendo que no uses la función ereg() ya que esta obsoleta desde la versión 5.3.0 de PHP, si migras o actualiza a una version actual, ya sea por seguridad o otro motivo y usas ereg, te dara errores. Ocupa preg_match().

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.