Получить страну IP-адреса с PHP - PullRequest
90 голосов
/ 06 сентября 2010

В идеале я пытаюсь собрать PHP-скрипт, который можно запросить из любого веб-браузера, и он возвращает страну с IP-адресом, который обращался к PHP-скрипту.

Возможно ли это или естьлучшее решение?

Ответы [ 17 ]

1 голос
/ 05 июня 2014

Я нашел этот пост очень полезным. Это спасло мой день. http://www.techsirius.com/2014/05/simple-geo-tracking-system.html

Обычно вам нужно установить таблицу базы данных IP, а затем выполнить запрос mysql для определения местоположения IP.

<?php
include 'config.php';
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) OR die(mysql_error());
mysql_select_db(DB_NAME) OR die(mysql_error());
$ip =  $_SERVER['REMOTE_ADDR'];
$long = sprintf('%u', ip2long($ip));
$sql = "SELECT * FROM `geo_ips` WHERE '$long' BETWEEN `ip_start` AND `ip_end`";
$result = mysql_query($sql) OR die(mysql_error());
$ip_detail = mysql_fetch_assoc($result);
if($ip_detail){
    echo $ip_detail['country']."', '".$ip_detail['state']."', '".$ip_detail['city'];
}
else{
    //Something wrong with IP
}
1 голос
/ 18 февраля 2018

Ipdata.co предоставляет масштабируемый API для этого.С 10 глобальными конечными точками, каждый из которых способен обрабатывать> 800 миллионов запросов в день!

Он также предоставляет вам данные об организации, валюте, часовом поясе, коде вызова, флаге и узле выхода Tor с любого адреса IPv4 или IPv6.

В php

php > $ip = '8.8.8.8';
php > $details = json_decode(file_get_contents("https://api.ipdata.co/{$ip}"));
php > echo $details->region;
California
php > echo $details->city;
Mountain View
php > echo $details->country_name;
United States
php > echo $details->location;
37.405991,-122.078514

Отказ от ответственности

Я создал этот сервис.

1 голос
/ 09 июня 2015

Если вам нужна хорошая и обновленная база данных, чтобы иметь большую производительность и не запрашивать внешние услуги с вашего сайта, здесь есть хорошее место для загрузки обновленных и точных баз данных.

Я рекомендую это, потому что по моему опыту он работал превосходно, включая город и страну для моего IP-адреса, который большинство других баз данных / apis не смогли включить / сообщить о моем местоположении, кроме этого сервиса , который указывал меня в эту базу данных.
(Мой ip-адрес был из города "Рашт" в "Иране", когда я тестировал, и ip был: 2.187.21.235 равен 45815275)

Поэтому я рекомендую использовать эти сервисы, если вы не уверены, какой сервис более точный:

База данных: http://lite.ip2location.com/databases

API Сервис: http://ipinfodb.com/ip_location_api.php

1 голос
/ 15 ноября 2017

Я запускаю службу на IPLocate.io , которую вы можете бесплатно подключить одним простым вызовом:

<?php
$res = file_get_contents('https://www.iplocate.io/api/lookup/8.8.8.8');
$res = json_decode($res);

echo $res->country; // United States
echo $res->continent; // North America
echo $res->latitude; // 37.751
echo $res->longitude; // -97.822

var_dump($res);

Объект $res будет содержать ваши поля геолокации, такие как country, city и т. Д.

Проверьте документы для получения дополнительной информации.

1 голос
/ 29 июля 2017

Вы можете использовать https://ip -api.io / , чтобы получить название страны, название города, широту и долготу.Он поддерживает IPv6.

В качестве бонуса он сообщит, является ли ip-адрес узлом tor, общедоступным прокси-сервером или спамером.

Код Php:

$result = json_decode(file_get_contents('http://ip-api.io/json/64.30.228.118'));
var_dump($result);

Выход:

{
"ip": "64.30.228.118",
"country_code": "US",
"country_name": "United States",
"region_code": "FL",
"region_name": "Florida",
"city": "Fort Lauderdale",
"zip_code": "33309",
"time_zone": "America/New_York",
"latitude": 26.1882,
"longitude": -80.1711,
"metro_code": 528,
"suspicious_factors": {
"is_proxy": false,
"is_tor_node": false,
"is_spam": false,
"is_suspicious": false
}
0 голосов
/ 13 октября 2016

Вы можете воспользоваться услугами https://www.geoip -db.com Они предоставляют решение обратного вызова JSON или JSONP.

<?php

    $json = file_get_contents("https://www.geoip-db.com/json");
    $data = json_decode($json);

    print $data->country_code . "<br>";
    print $data->country_name . "<br>";
    print $data->state . "<br>";
    print $data->city . "<br>";
    print $data->postal . "<br>";
    print $data->latitude . "<br>";
    print $data->longitude . "<br>";
    print $data->IPv4 . "<br>";

?>
0 голосов
/ 07 июня 2012

Используйте виджет www.feedsalive.com , чтобы получить информацию о стране и информацию о последней странице.

...