visitante - php ip
Conseguir visitantes del país desde su IP (20)
¡Mi servicio https://ipdata.co proporciona el nombre del país en 5 idiomas! Además de la organización, la moneda, la zona horaria, el código de llamada, el indicador y los datos de estado del nodo de salida Tor desde cualquier dirección IPv4 o IPv6.
¡También es extremadamente escalable con 10 regiones alrededor del mundo, cada una capaz de manejar llamadas> 800M diarias!
Las opciones incluyen; Inglés (en), alemán (de), japonés (ja), francés (fr) y chino simplificado (za-CH)
$ip = ''74.125.230.195'';
$details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}"));
echo $details->country_name;
//United States
echo $details->city;
//Mountain View
$details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}/zh-CN"));
echo $details->country_name;
//美国
Quiero obtener visitantes del país a través de su IP ... En este momento estoy usando esto ( http://api.hostip.info/country.php?ip= ......)
Aquí está mi código:
<?php
if (isset($_SERVER[''HTTP_CLIENT_IP'']))
{
$real_ip_adress = $_SERVER[''HTTP_CLIENT_IP''];
}
if (isset($_SERVER[''HTTP_X_FORWARDED_FOR'']))
{
$real_ip_adress = $_SERVER[''HTTP_X_FORWARDED_FOR''];
}
else
{
$real_ip_adress = $_SERVER[''REMOTE_ADDR''];
}
$cip = $real_ip_adress;
$iptolocation = ''http://api.hostip.info/country.php?ip='' . $cip;
$creatorlocation = file_get_contents($iptolocation);
?>
Bueno, está funcionando correctamente, pero el asunto es que devuelve el código de país como US o CA., y no el nombre completo de país como Estados Unidos o Canadá.
Entonces, ¿hay alguna buena alternativa para que hostip.info ofrezca esto?
Sé que puedo escribir un código que eventualmente convertirá estas dos letras en nombres de países enteros, pero soy demasiado perezoso para escribir un código que contenga todos los países ...
PD: Por alguna razón, no quiero usar ningún archivo CSV ya hecho o ningún código que capture esta información, algo así como el código listo para usar de ip2country y CSV.
Echa un vistazo a php-ip-2-country desde code.google. La base de datos que proporcionan se actualiza a diario, por lo que no es necesario conectarse a un servidor externo para verificar si aloja su propio servidor SQL. Entonces, usando el código solo tendrías que escribir:
<?php
$ip = $_SERVER[''REMOTE_ADDR''];
if(!empty($ip)){
require(''./phpip2country.class.php'');
/**
* Newest data (SQL) avaliable on project website
* @link http://code.google.com/p/php-ip-2-country/
*/
$dbConfigArray = array(
''host'' => ''localhost'', //example host name
''port'' => 3306, //3306 -default mysql port number
''dbName'' => ''ip_to_country'', //example db name
''dbUserName'' => ''ip_to_country'', //example user name
''dbUserPassword'' => ''QrDB9Y8CKMdLDH8Q'', //example user password
''tableName'' => ''ip_to_country'', //example table name
);
$phpIp2Country = new phpIp2Country($ip,$dbConfigArray);
$country = $phpIp2Country->getInfo(IP_COUNTRY_NAME);
echo $country;
?>
Código de ejemplo (del recurso)
<?
require(''phpip2country.class.php'');
$dbConfigArray = array(
''host'' => ''localhost'', //example host name
''port'' => 3306, //3306 -default mysql port number
''dbName'' => ''ip_to_country'', //example db name
''dbUserName'' => ''ip_to_country'', //example user name
''dbUserPassword'' => ''QrDB9Y8CKMdLDH8Q'', //example user password
''tableName'' => ''ip_to_country'', //example table name
);
$phpIp2Country = new phpIp2Country(''213.180.138.148'',$dbConfigArray);
print_r($phpIp2Country->getInfo(IP_INFO));
?>
Salida
Array
(
[IP_FROM] => 3585376256
[IP_TO] => 3585384447
[REGISTRY] => RIPE
[ASSIGNED] => 948758400
[CTRY] => PL
[CNTRY] => POL
[COUNTRY] => POLAND
[IP_STR] => 213.180.138.148
[IP_VALUE] => 3585378964
[IP_FROM_STR] => 127.255.255.255
[IP_TO_STR] => 127.255.255.255
)
En realidad, puede llamar a http://api.hostip.info/?ip=123.125.114.144 para obtener la información, que se presenta en XML.
Estoy usando ipinfodb.com
api y ipinfodb.com
exactamente lo que estás buscando.
Es completamente gratis, solo necesita registrarse con ellos para obtener su clave de API. Puede incluir su clase php descargándola de su sitio web o puede usar el formato url para recuperar información.
Esto es lo que estoy haciendo:
Incluí su clase php en mi script y usando el siguiente código:
$ipLite = new ip2location_lite;
$ipLite->setKey(''your_api_key'');
if(!$_COOKIE["visitorCity"]){ //I am using cookie to store information
$visitorCity = $ipLite->getCity($_SERVER[''REMOTE_ADDR'']);
if ($visitorCity[''statusCode''] == ''OK'') {
$data = base64_encode(serialize($visitorCity));
setcookie("visitorCity", $data, time()+3600*24*7); //set cookie for 1 week
}
}
$visitorCity = unserialize(base64_decode($_COOKIE["visitorCity"]));
echo $visitorCity[''countryName''].'' Region''.$visitorCity[''regionName''];
Eso es.
Existe una versión de archivo plano bien mantenida de la base de datos ip-> mantenida por la comunidad Perl en CPAN
El acceso a esos archivos no requiere un servidor de datos, y los datos en sí son aproximadamente 515k
Higemaru ha escrito un contenedor de PHP para hablar con esa información: php-ip-country-fast
Intenté la respuesta de Chandra pero la configuración de mi servidor no permite el archivo_get_contents ()
PHP Warning: file_get_contents() URL file-access is disabled in the server configuration
Modifiqué el código de Chandra para que también funcione para servidores como el que usa cURL:
function ip_visitor_country()
{
$client = @$_SERVER[''HTTP_CLIENT_IP''];
$forward = @$_SERVER[''HTTP_X_FORWARDED_FOR''];
$remote = $_SERVER[''REMOTE_ADDR''];
$country = "Unknown";
if(filter_var($client, FILTER_VALIDATE_IP))
{
$ip = $client;
}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{
$ip = $forward;
}
else
{
$ip = $remote;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.geoplugin.net/json.gp?ip=".$ip);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$ip_data_in = curl_exec($ch); // string
curl_close($ch);
$ip_data = json_decode($ip_data_in,true);
$ip_data = str_replace(''"'', ''"'', $ip_data); // for PHP 5.2 see .com/questions/3110487/
if($ip_data && $ip_data[''geoplugin_countryName''] != null) {
$country = $ip_data[''geoplugin_countryName''];
}
return ''IP: ''.$ip.'' # Country: ''.$country;
}
echo ip_visitor_country(); // output Coutry name
?>
Espero que ayude ;-)
La API de país de usuario tiene exactamente lo que necesita. Aquí hay un código de muestra que usa file_get_contents () como lo hace originalmente:
$result = json_decode(file_get_contents(''http://usercountry.com/v1.0/json/''.$cip), true);
$result[''country''][''name'']; // this contains what you need
Muchas formas diferentes de hacerlo ...
Solución # 1:
Un servicio de un tercero que podría usar es http://ipinfodb.com . Proporcionan nombre de host, geolocalización e información adicional.
Regístrese para obtener una clave API aquí: http://ipinfodb.com/register.php . Esto le permitirá recuperar los resultados de su servidor, sin esto no funcionará.
Copie y pase el siguiente código PHP:
$ipaddress = $_SERVER[''REMOTE_ADDR''];
$api_key = ''YOUR_API_KEY_HERE'';
$data = file_get_contents("http://api.ipinfodb.com/v3/ip-city/?key=$api_key&ip=$ipaddress&format=json");
$data = json_decode($data);
$country = $data[''Country''];
Abajo:
Citando de su sitio web:
Nuestra API gratuita utiliza la versión Lite de IP2Location que proporciona una menor precisión.
Solución # 2:
Esta función devolverá el nombre del país utilizando el servicio http://www.netip.de/ .
$ipaddress = $_SERVER[''REMOTE_ADDR''];
function geoCheckIP($ip)
{
$response=@file_get_contents(''http://www.netip.de/search?query=''.$ip);
$patterns=array();
$patterns["country"] = ''#Country: (.*?) #i'';
$ipInfo=array();
foreach ($patterns as $key => $pattern)
{
$ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : ''not found'';
}
return $ipInfo;
}
print_r(geoCheckIP($ipaddress));
Salida:
Array ( [country] => DE - Germany ) // Full Country Name
No estoy seguro si este es un nuevo servicio, pero ahora (2016) la forma más fácil en php es usar el servicio web php de geoplugin: http://www.geoplugin.net/php.gp :
Uso básico:
// GET IP ADDRESS
if (!empty($_SERVER[''HTTP_CLIENT_IP''])) {
$ip = $_SERVER[''HTTP_CLIENT_IP''];
} else if (!empty($_SERVER[''HTTP_X_FORWARDED_FOR''])) {
$ip = $_SERVER[''HTTP_X_FORWARDED_FOR''];
} else if (!empty($_SERVER[''REMOTE_ADDR''])) {
$ip = $_SERVER[''REMOTE_ADDR''];
} else {
$ip = false;
}
// CALL THE WEBSERVICE
$ip_info = unserialize(file_get_contents(''http://www.geoplugin.net/php.gp?ip=''.$ip));
También proporcionan una clase preparada: http://www.geoplugin.com/_media/webservices/geoplugin.class.php.tgz?id=webservices%3Aphp&cache=cache
Podemos usar geobytes.com para obtener la ubicación usando la dirección IP del usuario
$user_ip = getIP();
$meta_tags = get_meta_tags(''http://www.geobytes.com/IPLocator.htm?GetLocation&template=php3.txt&IPAddress='' . $user_ip);
echo ''<pre>'';
print_r($meta_tags);
Devolverá datos como este
Array(
[known] => true
[locationcode] => USCALANG
[fips104] => US
[iso2] => US
[iso3] => USA
[ison] => 840
[internet] => US
[countryid] => 254
[country] => United States
[regionid] => 126
[region] => California
[regioncode] => CA
[adm1code] =>
[cityid] => 7275
[city] => Los Angeles
[latitude] => 34.0452
[longitude] => -118.2840
[timezone] => -08:00
[certainty] => 53
[mapbytesremaining] => Free
)
Función para obtener IP de usuario
function getIP(){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$pattern = "/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/";
if(preg_match($pattern, $_SERVER["HTTP_X_FORWARDED_FOR"])){
$userIP = $_SERVER["HTTP_X_FORWARDED_FOR"];
}else{
$userIP = $_SERVER["REMOTE_ADDR"];
}
}
else{
$userIP = $_SERVER["REMOTE_ADDR"];
}
return $userIP;
}
Pruebe este código simple de una línea. Obtendrá el país y la ciudad de los visitantes desde su dirección IP remota.
$tags = get_meta_tags(''http://www.geobytes.com/IpLocator.htm?GetLocation&template=php3.txt&IpAddress='' . $_SERVER[''REMOTE_ADDR'']);
echo $tags[''country''];
echo $tags[''city''];
Puede usar un servicio web desde http://ip-api.com
en tu código php, haz lo siguiente:
<?php
$ip = $_REQUEST[''REMOTE_ADDR'']; // the IP address to query
$query = @unserialize(file_get_contents(''http://ip-api.com/php/''.$ip));
if($query && $query[''status''] == ''success'') {
echo ''Hello visitor from ''.$query[''country''].'', ''.$query[''city''].''!'';
} else {
echo ''Unable to get location'';
}
?>
la consulta tiene muchas otras informaciones:
array (
''status'' => ''success'',
''country'' => ''COUNTRY'',
''countryCode'' => ''COUNTRY CODE'',
''region'' => ''REGION CODE'',
''regionName'' => ''REGION NAME'',
''city'' => ''CITY'',
''zip'' => ZIP CODE,
''lat'' => LATITUDE,
''lon'' => LONGITUDE,
''timezone'' => ''TIME ZONE'',
''isp'' => ''ISP NAME'',
''org'' => ''ORGANIZATION NAME'',
''as'' => ''AS NUMBER / NAME'',
''query'' => ''IP ADDRESS USED FOR QUERY'',
)
Puede usar una API simple de http://www.geoplugin.net/
$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".getRealIpAddr());
echo $xml->geoplugin_countryName ;
echo "<pre>";
foreach ($xml as $key => $value)
{
echo $key , "= " , $value , " /n" ;
}
echo "</pre>";
Función utilizada
function getRealIpAddr()
{
if (!empty($_SERVER[''HTTP_CLIENT_IP''])) //check ip from share internet
{
$ip=$_SERVER[''HTTP_CLIENT_IP''];
}
elseif (!empty($_SERVER[''HTTP_X_FORWARDED_FOR''])) //to check ip is pass from proxy
{
$ip=$_SERVER[''HTTP_X_FORWARDED_FOR''];
}
else
{
$ip=$_SERVER[''REMOTE_ADDR''];
}
return $ip;
}
Salida
United States
geoplugin_city= San Antonio
geoplugin_region= TX
geoplugin_areaCode= 210
geoplugin_dmaCode= 641
geoplugin_countryCode= US
geoplugin_countryName= United States
geoplugin_continentCode= NA
geoplugin_latitude= 29.488899230957
geoplugin_longitude= -98.398696899414
geoplugin_regionCode= TX
geoplugin_regionName= Texas
geoplugin_currencyCode= USD
geoplugin_currencySymbol= $
geoplugin_currencyConverter= 1
Te hace tener tantas opciones que puedes jugar con
Gracias
:)
Reemplazar 127.0.0.1
con los visitantes IpAddress.
$country = geoip_country_name_by_name(''127.0.0.1'');
Las instrucciones de instalación están here , y lea esto para saber cómo obtener Ciudad, Estado, País, Longitud, Latitud, etc.
Tengo una respuesta breve para esta pregunta que he utilizado en un proyecto. En mi respuesta, he considerado que tienes una dirección IP de visitante
$ip = "202.142.178.220";
$ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip));
//get ISO2 country code
if(property_exists($ipdat, ''geoplugin_countryCode'')) {
echo $ipdat->geoplugin_countryCode;
}
//get country full name
if(property_exists($ipdat, ''geoplugin_countryName'')) {
echo $ipdat->geoplugin_countryName;
}
Si te ayuda a votar mi respuesta.
Un trazador de líneas con una dirección IP a la API del país
echo file_get_contents(''https://ipapi.co/8.8.8.8/country_name/'');
> United States
Ejemplo:
https://ipapi.co/country_name/ - su país
https://ipapi.co/8.8.8.8/country_name/ - country for IP 8.8.8.8
Use MaxMind GeoIP (o GeoIPLite si no está listo para pagar).
$gi = geoip_open(''GeoIP.dat'', GEOIP_MEMORY_CACHE);
$country = geoip_country_code_by_addr($gi, $_SERVER[''REMOTE_ADDR'']);
geoip_close($gi);
Use los siguientes servicios
1) http://api.hostip.info/get_html.php?ip=12.215.42.19
2)
$json = file_get_contents(''http://freegeoip.appspot.com/json/66.102.13.106'');
$expression = json_decode($json);
print_r($expression);
puede usar http://ipinfo.io/ para obtener detalles de la dirección IP. Es fácil de usar.
<?php
function ip_details($ip)
{
$json = file_get_contents("http://ipinfo.io/{$ip}");
$details = json_decode($json);
return $details;
}
$details = ip_details(YoUR IP ADDRESS);
echo $details->city;
echo "<br>".$details->country;
echo "<br>".$details->org;
echo "<br>".$details->hostname; /
?>
Prueba esta simple función PHP.
<?php
function ip_info($ip = NULL, $purpose = "location", $deep_detect = TRUE) {
$output = NULL;
if (filter_var($ip, FILTER_VALIDATE_IP) === FALSE) {
$ip = $_SERVER["REMOTE_ADDR"];
if ($deep_detect) {
if (filter_var(@$_SERVER[''HTTP_X_FORWARDED_FOR''], FILTER_VALIDATE_IP))
$ip = $_SERVER[''HTTP_X_FORWARDED_FOR''];
if (filter_var(@$_SERVER[''HTTP_CLIENT_IP''], FILTER_VALIDATE_IP))
$ip = $_SERVER[''HTTP_CLIENT_IP''];
}
}
$purpose = str_replace(array("name", "/n", "/t", " ", "-", "_"), NULL, strtolower(trim($purpose)));
$support = array("country", "countrycode", "state", "region", "city", "location", "address");
$continents = array(
"AF" => "Africa",
"AN" => "Antarctica",
"AS" => "Asia",
"EU" => "Europe",
"OC" => "Australia (Oceania)",
"NA" => "North America",
"SA" => "South America"
);
if (filter_var($ip, FILTER_VALIDATE_IP) && in_array($purpose, $support)) {
$ipdat = @json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip=" . $ip));
if (@strlen(trim($ipdat->geoplugin_countryCode)) == 2) {
switch ($purpose) {
case "location":
$output = array(
"city" => @$ipdat->geoplugin_city,
"state" => @$ipdat->geoplugin_regionName,
"country" => @$ipdat->geoplugin_countryName,
"country_code" => @$ipdat->geoplugin_countryCode,
"continent" => @$continents[strtoupper($ipdat->geoplugin_continentCode)],
"continent_code" => @$ipdat->geoplugin_continentCode
);
break;
case "address":
$address = array($ipdat->geoplugin_countryName);
if (@strlen($ipdat->geoplugin_regionName) >= 1)
$address[] = $ipdat->geoplugin_regionName;
if (@strlen($ipdat->geoplugin_city) >= 1)
$address[] = $ipdat->geoplugin_city;
$output = implode(", ", array_reverse($address));
break;
case "city":
$output = @$ipdat->geoplugin_city;
break;
case "state":
$output = @$ipdat->geoplugin_regionName;
break;
case "region":
$output = @$ipdat->geoplugin_regionName;
break;
case "country":
$output = @$ipdat->geoplugin_countryName;
break;
case "countrycode":
$output = @$ipdat->geoplugin_countryCode;
break;
}
}
}
return $output;
}
?>
Cómo utilizar:
Ejemplo1: obtener detalles de la dirección IP del visitante
<?php
echo ip_info("Visitor", "Country"); // India
echo ip_info("Visitor", "Country Code"); // IN
echo ip_info("Visitor", "State"); // Andhra Pradesh
echo ip_info("Visitor", "City"); // Proddatur
echo ip_info("Visitor", "Address"); // Proddatur, Andhra Pradesh, India
print_r(ip_info("Visitor", "Location")); // Array ( [city] => Proddatur [state] => Andhra Pradesh [country] => India [country_code] => IN [continent] => Asia [continent_code] => AS )
?>
Ejemplo 2: Obtenga detalles de cualquier dirección IP. [Compatible con IPV4 y IPV6]
<?php
echo ip_info("173.252.110.27", "Country"); // United States
echo ip_info("173.252.110.27", "Country Code"); // US
echo ip_info("173.252.110.27", "State"); // California
echo ip_info("173.252.110.27", "City"); // Menlo Park
echo ip_info("173.252.110.27", "Address"); // Menlo Park, California, United States
print_r(ip_info("173.252.110.27", "Location")); // Array ( [city] => Menlo Park [state] => California [country] => United States [country_code] => US [continent] => North America [continent_code] => NA )
?>