{"id":27727,"date":"2021-05-14T14:55:00","date_gmt":"2021-05-14T11:55:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27727"},"modified":"2021-10-18T03:47:12","modified_gmt":"2021-10-18T00:47:12","slug":"wdrazanie-geolokalizacji-ip-za-pomoca-darmowej-wersji-ip2location-lite-i-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/wdrazanie-geolokalizacji-ip-za-pomoca-darmowej-wersji-ip2location-lite-i-php\/","title":{"rendered":"Wdra\u017canie geolokalizacji IP za pomoc\u0105 darmowej wersji IP2Location LITE i PHP"},"content":{"rendered":"<p>Odwied\u017a dowolne witryny, a najprawdopodobniej znajdziesz jak\u0105\u015b form\u0119 u\u017cywanej lokalizacji. Najcz\u0119stszym z nich jest wy\u015bwietlanie reklam lokalnych, nawet je\u015bli witryna mo\u017ce by\u0107 obca. Korzystaj\u0105c z adresu IP osoby odwiedzaj\u0105cej witryn\u0119, operator witryny mo\u017ce kierowa\u0107 odpowiednie reklamy, tre\u015bci lub zmieni\u0107 j\u0119zyk witryny w oparciu o kraj geolokalizacji.<\/p>\n<p>Zbadamy, jak zaimplementowa\u0107 t\u0119 funkcj\u0119 geolokalizacji we w\u0142asnej witrynie internetowej za pomoc\u0105 PHP. Cz\u0119\u015b\u0107 1 dotyczy tworzenia bazy danych i tabeli oraz importu danych. Cz\u0119\u015b\u0107 2 poka\u017ce, jak u\u017cywa\u0107 PHP do wysy\u0142ania zapyta\u0144 do bazy danych i pobierania wynik\u00f3w.<\/p>\n<h3>Cz\u0119\u015b\u0107 1: Importowanie danych geolokalizacyjnych<\/h3>\n<p>Za\u0142\u00f3\u017cmy, \u017ce w Twojej witrynie dzia\u0142a serwer WWW Apache z PHP obs\u0142uguj\u0105cym backend. Za\u0142\u00f3\u017cmy, \u017ce u\u017cywasz MySQL, poniewa\u017c PHP zwykle dzia\u0142a z MySQL.<\/p>\n<p>Pierwszym krokiem jest pobranie pliku bazy danych DB11 LITE z <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> kt\u00f3ry jest bezp\u0142atny po rejestracji.<\/p>\n<p>Po pobraniu spakowanego pliku wyodr\u0119bnij plik danych IP2LOCATION-LITE-DB11.CSV do folderu o nazwie <code>\/root\/ip2location_data<\/code>(jest to tylko przyk\u0142adowa nazwa folderu).<\/p>\n<p>W swoim MySQL wykonaj nast\u0119puj\u0105ce czynno\u015bci, aby utworzy\u0107 baz\u0119 danych i tabel\u0119, w kt\u00f3rej b\u0119dziemy przechowywa\u0107 dane 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>Teraz uruchom nast\u0119puj\u0105ce polecenie w MySQL, aby zaimportowa\u0107 dane.<\/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>Cz\u0119\u015b\u0107 2: Zapytanie o dane geolokalizacyjne na twojej stronie PHP<\/h3>\n<p>Utworzymy teraz stron\u0119 PHP, aby przeszukiwa\u0107 baz\u0119 danych i wyprowadza\u0107 dane geolokalizacyjne dla odwiedzaj\u0105cego stron\u0119.<\/p>\n<p>Utw\u00f3rz stron\u0119 o nazwie <code>test.php<\/code>i wklej do niej nast\u0119puj\u0105cy kod.<\/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>Teraz otw\u00f3rz t\u0119 stron\u0119 w przegl\u0105darce. Powiniene\u015b zobaczy\u0107 wszystkie dane geolokalizacyjne dla twojego w\u0142asnego adresu IP. Gdy zobaczysz wszystkie pola geolokalizacji zwr\u00f3cone przez dane IP2Location DB11 LITE, mo\u017cesz ich u\u017cy\u0107 w wielu scenariuszach. Mo\u017cesz filtrowa\u0107 ruch, blokowa\u0107 lub przekierowywa\u0107 u\u017cytkownik\u00f3w na podstawie ich lokalizacji.<\/p>\n<p>Je\u015bli masz wi\u0119cej pyta\u0144 na temat wdro\u017cenia, wi\u0119cej samouczk\u00f3w znajdziesz w <a href=\"https:\/\/blog.ip2location.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">IP2Location Blog<\/a>.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Odwied\u017a dowolne strony internetowe, a najprawdopodobniej znajdziesz jak\u0105\u015b form\u0119 u\u017cywanej lokalizacji. Najcz\u0119stsze jest wy\u015bwietlanie reklam lokalnych dla Ciebie&#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":[277],"tags":[847],"class_list":["post-27727","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/27727","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=27727"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/27727\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/20619"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=27727"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=27727"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=27727"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}