{"id":29732,"date":"2021-06-22T18:20:00","date_gmt":"2021-06-22T15:20:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29732"},"modified":"2021-10-17T16:14:12","modified_gmt":"2021-10-17T13:14:12","slug":"encuentre-la-geolocalizacion-usando-la-direccion-ip-de-forma-gratuita-en-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/encuentre-la-geolocalizacion-usando-la-direccion-ip-de-forma-gratuita-en-php\/","title":{"rendered":"Encuentre la geolocalizaci\u00f3n usando la direcci\u00f3n IP de forma gratuita en PHP"},"content":{"rendered":"<p>Encontrar la geolocalizaci\u00f3n y la informaci\u00f3n del pa\u00eds de un usuario es necesario para la mayor\u00eda de los sitios web. Probablemente necesite mostrar contenido diferente seg\u00fan el pa\u00eds de un usuario, mostrar precios diferentes seg\u00fan los c\u00f3digos de moneda del pa\u00eds, etc. En estos escenarios, debe encontrar la geolocalizaci\u00f3n de un usuario y servir el contenido en consecuencia.<\/p>\n<p>En este art\u00edculo, le muestro c\u00f3mo encontrar la geolocalizaci\u00f3n utilizando la direcci\u00f3n IP de un usuario en PHP. Vamos a utilizar el <a href=\"https:\/\/ipgeolocationapi.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">servicio API de geolocalizaci\u00f3n IP<\/a> que es completamente gratuito.<\/p>\n<h3>Obtener geolocalizaci\u00f3n mediante direcci\u00f3n IP<\/h3>\n<p>En PHP podemos utilizar el servicio de &#8216;IP Geolocation API&#8217; a trav\u00e9s de cURL y Guzzle. Ambos son populares para llamar a servicios de API externos y obtener la respuesta. Dependiendo del flujo de su proyecto, puede usar cURL o Guzzle. En ambos casos, primero necesitamos obtener la direcci\u00f3n IP del usuario. Entonces, escriba el m\u00e9todo a continuaci\u00f3n que devolver\u00e1 una direcci\u00f3n IP.<\/p>\n<pre><code>&lt;?php\n\/\/ get user's IP address\nfunction getUserIpAddr() {\n\u00a0\u00a0\u00a0\u00a0if (!empty($_SERVER['HTTP_CLIENT_IP'])) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$ip = $_SERVER['HTTP_CLIENT_IP'];\n\u00a0\u00a0\u00a0\u00a0} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];\n\u00a0\u00a0\u00a0\u00a0} else {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$ip = $_SERVER['REMOTE_ADDR'];\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0return $ip;\n}<\/code><\/pre>\n<h4>Usando cURL<\/h4>\n<p>El cURL viene por defecto con la instalaci\u00f3n de PHP. No es necesario instalar ning\u00fan paquete por separado. Solo necesita asegurarse de que est\u00e9 habilitado en su servidor antes de usarlo.<\/p>\n<p>A trav\u00e9s de cURL, daremos una llamada al punto final de &#8216;IP Geolocation API&#8217; proporcionando la direcci\u00f3n IP del usuario e imprimiremos la respuesta.<\/p>\n<pre><code>&lt;?php\n$ip_address = getUserIpAddr();\n\u00a0\u00a0\n$url = \"https:\/\/api.ipgeolocationapi.com\/geolocate\/$ip_address\";\n$ch = curl_init();\u00a0 \ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);\ncurl_setopt($ch, CURLOPT_URL, $url);\n$response = curl_exec($ch);\n$arr_result = json_decode($response);\nprint_r($arr_result);<\/code><\/pre>\n<p>Obtendr\u00e1 la salida en formato JSON como se muestra a continuaci\u00f3n.<\/p>\n<pre><code>{\n   \"continent\": \"Asia\",\n   \"address_format\": \"{{recipient}}n{{street}}n{{region}}n{{city}} {{postalcode}}n{{country}}\",\n   \"alpha2\": \"IN\",\n   \"alpha3\": \"IND\",\n   \"country_code\": \"91\",\n   \"international_prefix\": \"00\",\n   \"ioc\": \"IND\",\n   \"gec\": \"IN\",\n   \"name\": \"India\",\n   \"national_destination_code_lengths\": [\n     2\n   ],\n   \"national_number_lengths\": [\n     10\n   ],\n   \"national_prefix\": \"0\",\n   \"number\": \"356\",\n   \"region\": \"Asia\",\n   \"subregion\": \"Southern Asia\",\n   \"world_region\": \"APAC\",\n   \"un_locode\": \"IN\",\n   \"nationality\": \"Indian\",\n   \"postal_code\": true,\n   \"unofficial_names\": [\n     \"India\",\n     \"Indien\",\n     \"Inde\",\n     \"\u30a4\u30f3\u30c9\"\n   ],\n   \"languages_official\": [\n     \"hi\",\n     \"en\"\n   ],\n   \"languages_spoken\": [\n     \"hi\",\n     \"en\"\n   ],\n   \"geo\": {\n     \"latitude\": 20.593684,\n     \"latitude_dec\": \"23.4060115814209\",\n     \"longitude\": 78.96288,\n     \"longitude_dec\": \"79.45809173583984\",\n     \"max_latitude\": 35.5087008,\n     \"max_longitude\": 97.3953587,\n     \"min_latitude\": 6.4626999,\n     \"min_longitude\": 68.1097,\n     \"bounds\": {\n       \"northeast\": {\n         \"lat\": 35.5087008,\n         \"lng\": 97.3953587\n       },\n       \"southwest\": {\n         \"lat\": 6.4626999,\n         \"lng\": 68.1097\n       }\n     }\n   },\n   \"currency_code\": \"INR\",\n   \"start_of_week\": \"monday\"\n }<\/code><\/pre>\n<h4>Usando Guzzle<\/h4>\n<p><a href=\"https:\/\/docs.guzzlephp.org\/en\/latest\/overview.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Guzzle<\/a> es un cliente HTTP de PHP para enviar solicitudes HTTP. Es una alternativa a cURL. Proporciona mucho c\u00f3digo limpio y una mejor experiencia para los desarrolladores.<\/p>\n<p>Al principio, debe instalar Guzzle usando Composer ejecutando el comando:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>A continuaci\u00f3n, escriba el c\u00f3digo a continuaci\u00f3n que llama a la API a trav\u00e9s de Guzzle.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\u00a0\nuse GuzzleHttpClient;\n\u00a0\u00a0\n$ip_address = getUserIpAddr();\n\u00a0\u00a0\n$client = new Client();\n\u00a0\u00a0\n$response = $client-&gt;request('GET', 'https:\/\/api.ipgeolocationapi.com\/geolocate\/'.$ip_address);\n\u00a0\u00a0\nif($response-&gt;getStatusCode() == 200) {\n\u00a0\u00a0\u00a0\u00a0$body = $response-&gt;getBody();\n\u00a0\u00a0\u00a0\u00a0$arr_body = json_decode($body);\n\u00a0\u00a0\u00a0\u00a0print_r($arr_body);\n}<\/code><\/pre>\n<p>As\u00ed es como obtenemos la Geolocalizaci\u00f3n usando la direcci\u00f3n IP en PHP. Comparta sus pensamientos o sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/biblioteca-geoip-de-laravel-descubra-la-geolocalizacion-usando-la-direccion-ip\/\" title=\"Biblioteca Geoip de Laravel - Descubra la geolocalizaci\u00f3n usando la direcci\u00f3n IP\">Biblioteca Geoip de Laravel &#8211; Descubra la geolocalizaci\u00f3n usando la direcci\u00f3n IP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-obtener-la-geolocalizacion-desde-ip-en-php\/\" title=\"C\u00f3mo obtener la geolocalizaci\u00f3n desde IP en PHP\">C\u00f3mo obtener la geolocalizaci\u00f3n desde IP en PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-utilizar-guzzle-un-cliente-http-php-para-enviar-solicitudes-http\/\" title=\"C\u00f3mo utilizar Guzzle: un cliente HTTP PHP para enviar solicitudes HTTP\">C\u00f3mo utilizar Guzzle: un cliente HTTP PHP para enviar solicitudes HTTP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A veces necesitamos encontrar la Geolocalizaci\u00f3n de un usuario para ofrecer contenido diferente seg\u00fan el pa\u00eds. En este art\u00edculo, le mostramos c\u00f3mo obtener<\/p>\n","protected":false},"author":1,"featured_media":21605,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[271],"tags":[849],"class_list":["post-29732","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29732","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=29732"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29732\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/21605"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=29732"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=29732"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=29732"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}