GeoIP2-php 根据IP查国家和城市,多语言
GeoLite2-City.mmdb 数据库的下载可以在网上搜索到,下载后保存到自己的网盘里,方便重复使用。
这个数据库的特点是支持多个国家的语言,但是中国内的IP大多精确到省级,极少城市级,我试了一个香港的IP,返回了西安的地点
以下是支持的语言
["de"]=> string(5) "China" ["en"]=> string(5) "China" ["es"]=> string(5) "China" ["fr"]=> string(5) "Chine" ["ja"]=> string(6) "中国" ["pt-BR"]=> string(5) "China" ["ru"]=> string(10) "Китай" ["zh-CN"]=> string(6) "中国"
代码示例
use GeoIp2\Database\Reader;
// $ip = '39.134.164.243'; //吉林、白城
// $ip = '14.121.170.23'; //深圳市
$ip = '128.101.101.101'; //美国
$db = 'vendor/geoip2/geoip2/src/Database/GeoLite2-City.mmdb';
$reader = new Reader($db);
$record = $reader->city($ip);
var_dump( get_class_methods($record) , $record->jsonSerialize() );
$db = 'vendor/geoip2/geoip2/src/Database/GeoLite2-City.mmdb';
$reader = new Reader($db);
$record = $reader->city($ip);
var_dump( get_class_methods($record) , $record->jsonSerialize() );
print($record->country->isoCode . "\n"); // 'US'
print($record->country->name . "\n"); // 'United States'
print($record->country->names['zh-CN'] . "\n"); // '美国'
print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
print($record->city->name . "\n"); // 'Minneapolis'
print($record->postal->code . "\n"); // '55455'
print($record->location->latitude . "\n"); // 44.9733
print($record->location->longitude . "\n"); // -93.2323
print($record->country->name . "\n"); // 'United States'
print($record->country->names['zh-CN'] . "\n"); // '美国'
print($record->mostSpecificSubdivision->name . "\n"); // 'Minnesota'
print($record->mostSpecificSubdivision->isoCode . "\n"); // 'MN'
print($record->city->name . "\n"); // 'Minneapolis'
print($record->postal->code . "\n"); // '55455'
print($record->location->latitude . "\n"); // 44.9733
print($record->location->longitude . "\n"); // -93.2323