una pais pagina estructura detectar completa php javascript timezone country country-codes

php - pais - ¿Cómo se detecta el país del visitante de un sitio web(específicamente, EE. UU. O no)?



detectar pais php (8)

Necesito mostrar diferentes enlaces para visitantes estadounidenses y no estadounidenses a mi sitio. Esto es solo por conveniencia, así que no estoy buscando un alto grado de precisión, y la seguridad o la suplantación no son una preocupación.

Sé que hay servicios y listas de orientación geográfica, pero esto parece excesivo, ya que solo necesito determinar (más o menos) si la persona está en los EE. UU. O no.

Estaba pensando en usar JavaScript para obtener la zona horaria del usuario, pero parece que solo proporciona el desplazamiento, por lo que los usuarios en Canadá, México y Sudamérica tendrían el mismo valor que las personas en los EE. UU.

¿Hay algún otro fragmento de información disponible en JavaScript o en PHP, que no sea capturar la dirección IP y realizar una búsqueda, para determinar esto?


@rostislav

o usando cURL:

public function __construct($site_name) { // create a new cURL resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml")); curl_setopt($ch, CURLOPT_URL, "http://api.wipmania.com".$_SERVER[''REMOTE_ADDR'']."?".$site_name); curl_setopt($ch, CURLOPT_HEADER, 0); // grab URL and pass it to the browser $response = curl_exec($ch); $info = curl_getinfo($ch,CURLINFO_HTTP_CODE); if (($response === false) || ($info !== 200)) { throw new Exception(''HTTP Error calling Wipmania API - HTTP Status: '' . $info . '' - cURL Erorr: '' . curl_error($ch)); } elseif (curl_errno($ch) > 0) { throw new Exception(''HTTP Error calling Wipmania API - cURL Error: '' . curl_error($ch)); } $this->country = $response; // close cURL resource, and free up system resources curl_close($ch); }


Dependiendo de qué países desee distinguir, las zonas horarias pueden ser una manera muy fácil de lograrlo, y supongo que es bastante confiable ya que la mayoría de las personas tendrán los relojes en sus computadoras correctamente configurados. (Aunque, por supuesto, hay muchos países que no puede distinguir usando esta técnica).

Aquí hay un ejemplo realmente simple de cómo hacerlo:

http://unmissabletokyo.com/country-detector


El mejor indicador es probablemente el encabezado HTTP Accept-Language. Se verá más abajo en la solicitud HTTP:

GET / HTTP/1.1 Accept: */* Accept-Language: en-us User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; MDDC; OfficeLiveConnector.1.4; OfficeLivePatch.0.0; .NET CLR 3.0.30729) Accept-Encoding: gzip, deflate Host: www.google.com Connection: Keep-Alive

Debería poder recuperar esto en PHP usando lo siguiente:

<?php echo $_SERVER[''HTTP_ACCEPT_LANGUAGE'']; ?>


Existen algunos servicios gratuitos que le permiten realizar una geolocalización por país y por IP desde el lado del cliente.

He usado el servicio JSONP gratuito de wipmania , es muy simple de usar:

<script type="text/javascript"> // plain JavaScript example function jsonpCallback(data) { alert(''Latitude: '' + data.latitude + ''/nLongitude: '' + data.longitude + ''/nCountry: '' + data.address.country); } </script> <script src="http://api.wipmania.com/jsonp?callback=jsonpCallback" type="text/javascript"></script>

O si usa un marco que admita JSONP, como jQuery, puede:

// jQuery example $.getJSON(''http://api.wipmania.com/jsonp?callback=?'', function (data) { alert(''Latitude: '' + data.latitude + ''/nLongitude: '' + data.longitude + ''/nCountry: '' + data.address.country); });

Compruebe el fragmento de arriba que se ejecuta here .


Mi solución, fácil y pequeña, en este ejemplo pruebo la región de Canadá desde el lenguaje fr-CA or en-CA

if( preg_match( "/^[a-z]{2}/-(ca)/i", $_SERVER[ "HTTP_ACCEPT_LANGUAGE" ] ) ){ $region = "Canada"; }


Simplemente podemos usar la API de Hostip

<?php $country_code = file_get_contents("http://api.hostip.info/country.php"); <br/>if($country_code == "US"){ echo "You Are USA"; } <br/>else{ echo "You Are Not USA";} ?>

Todos los códigos de país están aquí .. http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2


Wipmania.com y PHP

<?php $site_name = "www.your-site-name.com"; function getUserCountry() { $fp = fsockopen("api.wipmania.com", 80, $errno, $errstr, 5); if (!$fp) { // API is currently down, return as "Unknown" :( return "XX"; } else { $out = "GET /".$_SERVER[''REMOTE_ADDR'']."?".$site_name." HTTP/1.1/r/n"; $out .= "Host: api.wipmania.com/r/n"; $out .= "Typ: php/r/n"; $out .= "Ver: 1.0/r/n"; $out .= "Connection: Close/r/n/r/n"; fwrite($fp, $out); while (!feof($fp)) { $country = fgets($fp, 3); } fclose($fp); return $country; } } ?>


Yo diría que geotargetting es el único método que es remotamente confiable. Pero también hay casos en los que no ayuda en absoluto. Sigo llegando a sitios que piensan que estoy en Francia porque la columna vertebral de mi empresa está ahí y todo el tráfico de Internet pasa por ella.

El encabezado HTTP Accept no es suficiente para determinar la configuración regional del usuario. Solo le dice lo que el usuario seleccionó como su idioma, que puede no tener nada que ver con dónde se encuentran. Más sobre esto here .