我正在尝试使用免费的MaxMind GeoLite2代码来确定特定IP地址的国家/地区。
我使用的是此处发布的无Composer的方法:Get a localized name of the users city via Maxmind GeoLite2 Free
我确信它非常简单,但是我不知道如何实际通过IP地址并将其返回国家。
在$reader = new Reader...
行之后,我有$place = $reader->country('##.###.##.###');
(其中#是实际的IP地址编号),它不起作用。我试图用“城市”代替“国家”,但那也不起作用。我确定它很简单,只是不确定要返回该国家需要使用哪些参数。
错误日志中显示的错误是'PHP致命错误:在<<>>的路径中调用未定义的方法MaxMind \ Db \ Reader :: city()'
任何想法/建议将不胜感激。
要包含的文件中没有定义city()
或country()
函数(基于链接的答案。)相反,应该使用get()
获取IP地理信息,例如:
require_once __DIR__ . '/' . 'Db/Reader.php';
require_once __DIR__ . '/' . 'Db/Reader/Decoder.php';
require_once __DIR__ . '/' . 'Db/Reader/InvalidDatabaseException.php';
require_once __DIR__ . '/' . 'Db/Reader/Metadata.php';
require_once __DIR__ . '/' . 'Db/Reader/Util.php'; // new 2014/09
use MaxMind\Db\Reader;
$mmdb= 'GeoLite2-Country.mmdb';
$reader = new Reader( __DIR__ . '/' . $mmdb );
$ipData = $reader->get('##.###.##.###');
echo $ipData['country']['names']['en'];
将##.###.##.###
替换为要获取其信息的IP。显然,这需要您具有所有必需的代码文件,并且GeoLite2-Country.mmdb
因此完整的步骤将是:
Db
中的src/MaxMind
文件夹到目录中。GeoLite2-Country.mmdb
文件复制到与包含上述代码的文件相同的目录。##.###.##.###
替换为真实IP即可。这是一种简单的方法。首先,您必须在MySQL中插入用户IP。然后,您必须运行提取查询,类似这样]
//database connect or includ database php file
//user_ip detect
$geo = json_decode(file_get_contents("http://extreme-ip-lookup.com/json/$user_ip"));
$country = $geo->country;
$city = $geo->city;
$ipType = $geo->ipType;
$businessName = $geo->businessName;
$businessWebsite = $geo->businessWebsite;
echo "Location of $user_ip: $city, $country\n";
echo $ip_address;