visitantes visitante script saber publica para obtener guardar con codigo capturar php geolocation ip country-codes

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 )



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(''&quot;'', ''"'', $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: (.*?)&nbsp;#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

:)



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.



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);



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 ) ?>