Foros del Web » Programando para Internet » PHP »

Pais de procedencia - PHP.net - Metodo

Estas en el tema de Pais de procedencia - PHP.net - Metodo en el foro de PHP en Foros del Web. Aparentemente, segun dice la pagina principal de PHP.net, utilizan un sistemita para detectar el pais del navegante mediante su ip. La url es http://ip-to-country.com/ Si ...
  #1 (permalink)  
Antiguo 05/05/2003, 22:25
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 21 años, 10 meses
Puntos: 0
Pais de procedencia - PHP.net - Metodo

Aparentemente, segun dice la pagina principal de PHP.net, utilizan un sistemita para detectar el pais del navegante mediante su ip.
La url es http://ip-to-country.com/
Si uno usa uno de los ejemplos por url, devuelve el pais perfecto, aunque el host sea .com
Pero lo que no entiendo son las demas explicaciones, y como se podria usar internamente, si se puede.
Que alguien lo mire y me cuente please.
  #2 (permalink)  
Antiguo 06/05/2003, 00:18
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
busca bien en las faqs, o en el manual en php, yo te estaré buscando eso, porque lo tengo por ahí
  #3 (permalink)  
Antiguo 06/05/2003, 01:20
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 21 años, 10 meses
Puntos: 0
Si, se que esta mas o menos explicado por ahi el tema de abrir un socket con un servicio similar, pero aparentemente ellso ofrecen eso, y no entiendo como.
  #4 (permalink)  
Antiguo 06/05/2003, 01:36
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Parece ser que han montado una base de datos con: IP - País

PHP sólo tiene que consultar esa base de datos indicando la IP y capturar el valor arrojado.
__________________
M a l d i t o F r i k i
  #5 (permalink)  
Antiguo 06/05/2003, 07:52
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Es IMPOSIBLE que hayan hecho una base de datos por cada IP y asignarle un pais. Lo que han hecho es algo mucho más inteligente, y es tener "RANGOS" de IP's (200.68.0.0 - 200.69.0.0 por ejemplo, para Argentina) y allí asignarle un país.
Entonces mantienen la Base de datos increiblemente chica ( no llega a 200 kb ) y las búsquedas son del tipo :

SELECT COUNTRY_NAME FROM <TableName> WHERE IP Number BETWEEN IP_FROM AND IP_TO

Para eso hay que "convertir" la ip que queremos a un formato decimal, pero hasta te ofrecen la función para hacerlo.

Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 06/05/2003, 08:13
Avatar de temaqueja  
Fecha de Ingreso: agosto-2002
Ubicación: /dev/null/
Mensajes: 399
Antigüedad: 21 años, 8 meses
Puntos: 4
Paso a paso en tu propia web?

1. descarga el archivo csv de este mes (cada mes debes actualizarlo)
2. sube el csv (texto con comas) a una tabla, si usas mysql y phpmyadmin no necesitas ni pensar cómo.
3. jalate las 2 funciones de conversion que te dan
4. haz una query a esa tabla (la que indica webestudio)
5. muestralo! que mas quieres?
__________________
_________________________
La computadora nació para resolver problemas que antes no existían
  #7 (permalink)  
Antiguo 06/05/2003, 08:52
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
Código PHP:
$ip getEnv("REMOTE_ADDR"); //Obtiene la ip
$host gethostbyaddr($ip); //Obtiene el host de esa IP 
Tambien ten en cuenta que si vas a usar esa base de datos, ten cuidado de que no se propage tan públicamente esa base local que tienes, ya que puede interferir ante las leyes internacionales de propiedad privada.
  #8 (permalink)  
Antiguo 06/05/2003, 09:23
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Lado2mx, dudo que una tabla recopilada de la asignación de rangos de IP por país sea algo "ilegal"...
ya que son las mismas organizaciones internacionales de asignacion de IP's las que ofrecen la información.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #9 (permalink)  
Antiguo 06/05/2003, 11:37
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 21 años, 10 meses
Puntos: 0
Buenisimo! Muchas gracias, voy a comenzar a hacer pruebas!

PD: Uds lo sabian?
  #10 (permalink)  
Antiguo 06/05/2003, 11:48
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Claro, desde hace una o dos semanas, cuando se comenzó a charlar de esto en las listas internas de PHP.net.

saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #11 (permalink)  
Antiguo 04/09/2003, 12:23
 
Fecha de Ingreso: abril-2003
Ubicación: Córdoba
Mensajes: 160
Antigüedad: 21 años
Puntos: 0
ya pase la base de datos que contiene los rangos de ip a my base mySQL, lo que estoy fallando es al convertir el numero de ip .

quisiera si me podes explicar bien como se hace, probe con:

SELECT country_name FROM iptocountry
WHERE inet_aton('$remote_addr') >= ip_from
AND inet_aton('$remote_addr') <= ip_to;

esta no me trae nada de la base,
y probe con este:

$ip = "200.43.114.164";
$ip_bytes = explode(".", $ip);
$longnum = ($ip_bytes[0] << 24) | ($ip_bytes[1] << 16) |
($ip_bytes[2] << 8) | $ip_bytes[3];
printf("%u\n", $longnum);


el cual me tira el siguiente numero 3358290596
el cual tampoco me tira nada de la base porque no entra en ninguno de los rangos.

si yo pongo en el SELECT un numero que se que esta en la base, me arroja bien el pais, por eso digo que estoy fallando en trasformar el ip.

Gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:46.