{"id":28899,"date":"2021-06-22T18:05:00","date_gmt":"2021-06-22T15:05:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28899"},"modified":"2021-10-18T03:57:33","modified_gmt":"2021-10-18T00:57:33","slug":"encontre-geolocalizacao-usando-endereco-ip-gratuitamente-em-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/encontre-geolocalizacao-usando-endereco-ip-gratuitamente-em-php\/","title":{"rendered":"Encontre geolocaliza\u00e7\u00e3o usando endere\u00e7o IP gratuitamente em PHP"},"content":{"rendered":"<p>Encontrar a geolocaliza\u00e7\u00e3o e as informa\u00e7\u00f5es do pa\u00eds de um usu\u00e1rio \u00e9 necess\u00e1rio para a maioria dos sites. Provavelmente, voc\u00ea precisa mostrar conte\u00fado diferente com base no pa\u00eds de um usu\u00e1rio, mostrar pre\u00e7os diferentes de acordo com os c\u00f3digos de moeda do pa\u00eds, etc. Nesses cen\u00e1rios, voc\u00ea precisa encontrar a geolocaliza\u00e7\u00e3o de um usu\u00e1rio e servir o conte\u00fado de acordo.<\/p>\n<p>Neste artigo, mostrarei como encontrar geolocaliza\u00e7\u00e3o usando o endere\u00e7o IP de um usu\u00e1rio em PHP. Vamos usar o <a href=\"https:\/\/ipgeolocationapi.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">servi\u00e7o IP Geolocation API,<\/a> que \u00e9 totalmente gratuito.<\/p>\n<h3>Obtenha geolocaliza\u00e7\u00e3o usando endere\u00e7o IP<\/h3>\n<p>Em PHP, podemos usar o servi\u00e7o de &#8216;IP Geolocation API&#8217; por meio de cURL e Guzzle. Ambos s\u00e3o populares para chamar servi\u00e7os de API externos e obter a resposta deles. Dependendo do fluxo do seu projeto, voc\u00ea pode usar cURL ou Guzzle. Em ambos os casos, primeiro precisamos obter o endere\u00e7o IP do usu\u00e1rio. Portanto, escreva o m\u00e9todo abaixo que retornar\u00e1 um endere\u00e7o 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>O cURL vem por padr\u00e3o com a instala\u00e7\u00e3o do PHP. N\u00e3o h\u00e1 necessidade de instalar nenhum pacote separadamente. Voc\u00ea s\u00f3 precisa se certificar de que est\u00e1 habilitado em seu servidor antes de us\u00e1-lo.<\/p>\n<p>Por meio do cURL, faremos uma chamada para o endpoint de &#8216;IP Geolocation API&#8217; fornecendo o endere\u00e7o IP do usu\u00e1rio e imprimiremos a resposta.<\/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>Voc\u00ea obter\u00e1 a sa\u00edda no formato JSON semelhante a abaixo.<\/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> \u00e9 um cliente PHP HTTP para enviar requisi\u00e7\u00f5es HTTP. \u00c9 uma alternativa ao cURL. Ele fornece muito c\u00f3digo limpo e uma melhor experi\u00eancia para os desenvolvedores.<\/p>\n<p>Primeiramente, voc\u00ea precisa instalar o Guzzle usando o Composer executando o comando:<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Em seguida, escreva o c\u00f3digo abaixo que chama a API por meio do 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>\u00c9 assim que obtemos a geolocaliza\u00e7\u00e3o usando o endere\u00e7o IP em PHP. Por favor, compartilhe suas id\u00e9ias ou sugest\u00f5es na se\u00e7\u00e3o de coment\u00e1rios abaixo.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/biblioteca-laravel-geoip-descubra-a-geolocalizacao-usando-o-endereco-ip\/\" title=\"Biblioteca Laravel Geoip - Descubra Geolocaliza\u00e7\u00e3o Usando Endere\u00e7o IP\">Biblioteca Laravel Geoip &#8211; Descubra Geolocaliza\u00e7\u00e3o Usando Endere\u00e7o IP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-obter-geolocalizacao-de-ip-em-php\/\" title=\"Como obter geolocaliza\u00e7\u00e3o de IP em PHP\">Como obter geolocaliza\u00e7\u00e3o de IP em PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-usar-o-guzzle-um-cliente-php-http-para-enviar-solicitacoes-http\/\" title=\"Como usar o Guzzle - um cliente PHP HTTP para enviar solicita\u00e7\u00f5es HTTP\">Como usar o Guzzle &#8211; um cliente PHP HTTP para enviar solicita\u00e7\u00f5es HTTP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00c0s vezes, precisamos encontrar a geolocaliza\u00e7\u00e3o de um usu\u00e1rio para servir conte\u00fado diferente com base no pa\u00eds. Neste artigo, mostramos como obter<\/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":[278],"tags":[848],"class_list":["post-28899","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28899","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28899"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28899\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/21605"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28899"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}