{"id":27368,"date":"2021-05-14T14:45:00","date_gmt":"2021-05-14T11:45:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27368"},"modified":"2021-10-18T04:14:27","modified_gmt":"2021-10-18T01:14:27","slug":"implementando-geolocalizacao-de-ip-usando-free-ip2location-lite-e-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/implementando-geolocalizacao-de-ip-usando-free-ip2location-lite-e-php\/","title":{"rendered":"Implementando Geolocaliza\u00e7\u00e3o de IP usando Free IP2Location LITE e PHP"},"content":{"rendered":"<p>Visite qualquer site da Web e provavelmente voc\u00ea encontrar\u00e1 alguma forma de localiza\u00e7\u00e3o sendo usada. O mais comum \u00e9 a exibi\u00e7\u00e3o de an\u00fancios locais para voc\u00ea, mesmo que o site seja estrangeiro. Usando o endere\u00e7o IP do visitante da web, o operador do site pode direcionar an\u00fancios e conte\u00fados relevantes ou alterar o idioma do site com base no seu pa\u00eds de geolocaliza\u00e7\u00e3o.<\/p>\n<p>Exploraremos como implementar esse recurso de geolocaliza\u00e7\u00e3o em seu pr\u00f3prio site usando PHP. A Parte 1 trata da cria\u00e7\u00e3o do banco de dados e da tabela, bem como da importa\u00e7\u00e3o dos dados. A Parte 2 mostrar\u00e1 como usar o PHP para consultar o banco de dados e recuperar os resultados.<\/p>\n<h3>Parte 1: Importando os dados de geolocaliza\u00e7\u00e3o<\/h3>\n<p>Vamos supor que seu site esteja executando um servidor da web Apache com PHP no back-end. Assumiremos que voc\u00ea est\u00e1 usando MySQL, pois o PHP geralmente opera com MySQL.<\/p>\n<p>O primeiro passo \u00e9 baixar o arquivo de banco de dados DB11 LITE de <a href=\"https:\/\/lite.ip2location.com\/database\/ip-country-region-city-latitude-longitude-zipcode-timezone\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external\"><\/a><a href=\"https:\/\/lite.ip2location.com\/database\/ip-country-region-city-latitude-longitude-zipcode-timezone\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/lite.ip2location.com\/database\/ip-country-region-city-latitude-longitude-zipcode-timezone<\/a> que \u00e9 gratuito ap\u00f3s a inscri\u00e7\u00e3o.<\/p>\n<p>Depois de fazer download do arquivo compactado, extraia o arquivo de dados IP2LOCATION-LITE-DB11.CSV para uma pasta chamada <code>\/root\/ip2location_data<\/code>(este \u00e9 apenas um exemplo de nome de pasta).<\/p>\n<p>Em seu MySQL, execute o seguinte para criar o banco de dados e a tabela que armazenaremos os dados DB11.<\/p>\n<pre><code>CREATE DATABASE ip2location;\nUSE ip2location;\nCREATE TABLE `ip2location_db11`(\n\u00a0\u00a0\u00a0\u00a0`ip_from` INT(10) UNSIGNED,\n\u00a0\u00a0\u00a0\u00a0`ip_to` INT(10) UNSIGNED,\n\u00a0\u00a0\u00a0\u00a0`country_code` CHAR(2),\n\u00a0\u00a0\u00a0\u00a0`country_name` VARCHAR(64),\n\u00a0\u00a0\u00a0\u00a0`region_name` VARCHAR(128),\n\u00a0\u00a0\u00a0\u00a0`city_name` VARCHAR(128),\n\u00a0\u00a0\u00a0\u00a0`latitude` DOUBLE,\n\u00a0\u00a0\u00a0\u00a0`longitude` DOUBLE,\n\u00a0\u00a0\u00a0\u00a0`zip_code` VARCHAR(30),\n\u00a0\u00a0\u00a0\u00a0`time_zone` VARCHAR(8),\n\u00a0\u00a0\u00a0\u00a0INDEX `idx_ip_to` (`ip_to`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;<\/code><\/pre>\n<p>Agora execute o seguinte no MySQL para importar os dados.<\/p>\n<pre><code>LOAD DATA LOCAL\n\u00a0\u00a0\u00a0\u00a0INFILE '\/root\/ip2location_data\/IP2LOCATION-LITE-DB11.CSV'\nINTO TABLE\n\u00a0\u00a0\u00a0\u00a0`ip2location_db11`\nFIELDS TERMINATED BY ','\nENCLOSED BY '\"'\nLINES TERMINATED BY 'rn'\nIGNORE 0 LINES;<\/code><\/pre>\n<h3>Parte 2: Consultando os dados de geolocaliza\u00e7\u00e3o em sua p\u00e1gina da web PHP<\/h3>\n<p>Agora, criaremos a p\u00e1gina da web PHP para consultar o banco de dados e gerar os dados de geolocaliza\u00e7\u00e3o para o visitante da p\u00e1gina.<\/p>\n<p>Crie uma p\u00e1gina chamada <code>test.php<\/code>e cole o seguinte c\u00f3digo nela.<\/p>\n<pre><code>&lt;?php\n$dbname = 'ip2location'; \/\/ database name\n$dbhost = 'localhost'; \/\/ database server name\n$dbuser = 'root'; \/\/ database user login\n$dbpass = '12345'; \/\/ database user password\n?&gt;\n&lt;!DOCTYPE html&gt;\n&lt;head&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;title&gt;Test page&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;?php\ntry {\n\u00a0\u00a0\u00a0\u00a0$pdo = new PDO('mysql:host='. $dbhost. ';dbname='. $dbname. ';charset=utf8', $dbuser, $dbpass);\n\u00a0\u00a0\u00a0\u00a0$pdo-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$ip = $_SERVER['REMOTE_ADDR']; \/\/ web visitor's IP address\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$st = $pdo-&gt;prepare('select * from `ip2location_db11` where inet_aton(:ip) &lt;= ip_to limit 1');\n\u00a0\u00a0\u00a0\u00a0$st-&gt;bindParam(':ip', $ip, PDO::PARAM_STR);\n\u00a0\u00a0\u00a0\u00a0$st-&gt;execute();\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0$data = $st-&gt;fetchAll(PDO::FETCH_ASSOC);\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($st-&gt;rowCount() &gt; 0) {\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'country_code: '. $data[0]['country_code']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'country_name: '. $data[0]['country_name']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'region_name: '. $data[0]['region_name']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'city_name: '. $data[0]['city_name']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'latitude: '. $data[0]['latitude']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'longitude: '. $data[0]['longitude']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'zip_code: '. $data[0]['zip_code']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'time_zone: '. $data[0]['time_zone']. \"&lt;br \/&gt;n\";\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0else {\n\u00a0\u00a0\u00a0\u00a0\u00a0echo 'No data found.&lt;br \/&gt;'. \"n\";\n\u00a0\u00a0\u00a0\u00a0}\n}\ncatch(PDOException $e) {\n\u00a0\u00a0\u00a0\u00a0echo 'An error has occurred.&lt;br \/&gt;'. \"n\";\n}\n?&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Agora abra essa p\u00e1gina no seu navegador. Voc\u00ea deve ver todos os dados de geolocaliza\u00e7\u00e3o do seu pr\u00f3prio endere\u00e7o IP. Depois de ver todos os campos de geolocaliza\u00e7\u00e3o retornados pelos dados IP2Location DB11 LITE, voc\u00ea pode us\u00e1-los em muitos cen\u00e1rios. Voc\u00ea pode filtrar o tr\u00e1fego, bloquear ou redirecionar usu\u00e1rios com base em suas localiza\u00e7\u00f5es.<\/p>\n<p>Se voc\u00ea tiver mais perguntas sobre a implementa\u00e7\u00e3o, pode encontrar mais tutoriais no <a href=\"https:\/\/blog.ip2location.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Blog do IP2Location<\/a>.<\/p>\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>Visite qualquer site da Web e provavelmente voc\u00ea encontrar\u00e1 alguma forma de localiza\u00e7\u00e3o sendo usada. O mais comum \u00e9 a exibi\u00e7\u00e3o de an\u00fancios locais para voc\u00ea &#8230;<\/p>\n","protected":false},"author":1,"featured_media":20619,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[278],"tags":[848],"class_list":["post-27368","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\/27368","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=27368"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/27368\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20619"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=27368"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=27368"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=27368"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}