Implementering av IP-geolokalisering med gratis IP2Location LITE och PHP
Besök alla webbplatser och du kommer sannolikt att hitta någon form av lokalisering som används. Det vanligaste är att visa annonser som är lokala för dig även om webbplatsen kan vara utländsk. Med hjälp av webbbesökarens IP-adress kan webbplatsoperatören rikta in sig på relevanta annonser, innehåll eller ändra webbplatsens språk baserat på ditt geolokaliseringsland.
Vi kommer att undersöka hur du implementerar denna geolokaliseringsfunktion på din egen webbplats med hjälp av PHP. Del 1 handlar om att skapa databasen och tabellen samt importera data. Del 2 visar hur man använder PHP för att fråga databasen och hämta resultaten.
Del 1: Importera geolokaliseringsdata
Låt oss anta att din webbplats kör en Apache-webbserver med PHP som driver backend. Vi antar att du använder MySQL eftersom PHP vanligtvis fungerar med MySQL.
Det första steget är att ladda ner DB11 LITE-databasfilen från https://lite.ip2location.com/database/ip-country-region-city-latitude-longitude-zipcode-timezone som är gratis efter registrering.
När du har laddat ner den zippade filen extraherar du IP2LOCATION-LITE-DB11.CSV-datafilen till en mapp som heter /root/ip2location_data
(detta är bara ett exempel på mappnamn).
Kör följande i din MySQL för att skapa databasen och tabellen där vi lagrar DB11-data.
CREATE DATABASE ip2location;
USE ip2location;
CREATE TABLE `ip2location_db11`(
`ip_from` INT(10) UNSIGNED,
`ip_to` INT(10) UNSIGNED,
`country_code` CHAR(2),
`country_name` VARCHAR(64),
`region_name` VARCHAR(128),
`city_name` VARCHAR(128),
`latitude` DOUBLE,
`longitude` DOUBLE,
`zip_code` VARCHAR(30),
`time_zone` VARCHAR(8),
INDEX `idx_ip_to` (`ip_to`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Kör nu följande i MySQL för att importera data.
LOAD DATA LOCAL
INFILE '/root/ip2location_data/IP2LOCATION-LITE-DB11.CSV'
INTO TABLE
`ip2location_db11`
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'rn'
IGNORE 0 LINES;
Del 2: Fråga geolokaliseringsdata på din PHP-webbsida
Vi skapar nu PHP-webbsidan för att fråga databasen och mata ut geolokaliseringsdata för sidbesökaren.
Skapa en sida som heter test.php
och klistra in följande kod i den.
<?php
$dbname = 'ip2location'; // database name
$dbhost = 'localhost'; // database server name
$dbuser = 'root'; // database user login
$dbpass = '12345'; // database user password
?>
<!DOCTYPE html>
<head>
<title>Test page</title>
</head>
<body>
<?php
try {
$pdo = new PDO('mysql:host='. $dbhost. ';dbname='. $dbname. ';charset=utf8', $dbuser, $dbpass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$ip = $_SERVER['REMOTE_ADDR']; // web visitor's IP address
$st = $pdo->prepare('select * from `ip2location_db11` where inet_aton(:ip) <= ip_to limit 1');
$st->bindParam(':ip', $ip, PDO::PARAM_STR);
$st->execute();
$data = $st->fetchAll(PDO::FETCH_ASSOC);
if ($st->rowCount() > 0) {
echo 'country_code: '. $data[0]['country_code']. "<br />n";
echo 'country_name: '. $data[0]['country_name']. "<br />n";
echo 'region_name: '. $data[0]['region_name']. "<br />n";
echo 'city_name: '. $data[0]['city_name']. "<br />n";
echo 'latitude: '. $data[0]['latitude']. "<br />n";
echo 'longitude: '. $data[0]['longitude']. "<br />n";
echo 'zip_code: '. $data[0]['zip_code']. "<br />n";
echo 'time_zone: '. $data[0]['time_zone']. "<br />n";
}
else {
echo 'No data found.<br />'. "n";
}
}
catch(PDOException $e) {
echo 'An error has occurred.<br />'. "n";
}
?>
</body>
</html>
Öppna nu den sidan i din webbläsare. Du bör se all geolokaliseringsdata för din egen IP-adress. När du kan se alla geolokaliseringsfält som returneras av IP2Location DB11 LITE-data kan du använda dem i många scenarier. Du kan filtrera trafik, blockera eller omdirigera användare baserat på deras platser.
Om du har fler frågor om implementeringen kan du hitta fler handledning i IP2Location Blog.