Tri*_*tan 91 php ip-address geolocation geoip ip-geolocation
理想情况下,我正在尝试将可以从任何Web浏览器查询的PHP脚本放在一起,并返回访问PHP脚本的IP地址的国家/地区.
这可能还是有更好的解决方案?
spr*_*ain 88
您可以使用免费的简单API,例如:
哪一个看起来最值得信赖取决于你:)
否则,有些脚本基于服务器上的本地数据库.但是,数据库数据需要定期更新.看看这一个:
HTH!
编辑: 当然,根据您的项目,您可能希望查看HTML5位置功能.你不能在Internet Explorer上使用它们(IE9会支持它,还有很长的路要走),但是如果你的观众主要是在移动设备上或使用Safari/Firefox,那么绝对值得一看!
获得坐标后,您可以将它们反向地理编码为国家/地区代码.还有像这样的API:
更新,2013年4月
今天我建议使用Geocoder,这是一个PHP库,可以很容易地对IP地址和邮政地址数据进行地理编码.
***更新,2016
年9月由于Google的隐私政策已发生变化,如果您的服务器没有HTPPS证书或用户不允许您检查其位置,则无法使用HTML5 Geolocation API.所以现在你可以使用用户的IP并在PHP中签入或获得HTTPS证书.
Ben*_*ing 54
有各种Web API可以为您执行此操作.以下是使用我的服务http://ipinfo.io的示例:
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://ipinfo.io/{$ip}"));
echo $details->country; // -> "US"
Run Code Online (Sandbox Code Playgroud)
Web API是一个很好的快速简便的解决方案,但是如果你需要进行大量的查找,那么在你自己的机器上安装IP - > country数据库是一个更好的解决方案.MaxMind提供了一个免费的数据库,可以与各种PHP库一起使用,包括GeoIP.
qua*_*ano 25
您可以从MaxMind下载ip-tables:
http://www.maxmind.com/app/geolite
将CSV导入数据库(确保为ip_long_from + ip_long_to创建索引).然后你可以简单地做:
$iplong = ip2long($_SERVER['REMOTE_ADDR']);
// should use mysqli with prepared statements etc, but just an example
mysql_query("
SELECT country
FROM ip_table
WHERE $iplong BETWEEN ip_long_from AND ip_long_to
LIMIT 1
");
Run Code Online (Sandbox Code Playgroud)
cha*_*mcs 10
这是使用http://www.geoplugin.net/json.gp的示例
$ip = $_SERVER['REMOTE_ADDR'];
$details = json_decode(file_get_contents("http://www.geoplugin.net/json.gp?ip={$ip}"));
echo $details;
Run Code Online (Sandbox Code Playgroud)
码
echo file_get_contents('https://ipapi.co/8.8.8.8/country/');
Run Code Online (Sandbox Code Playgroud)
响应
US
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴.响应是text指您country在此处查询特定字段时的情况.无需解码,只需将其插入您的代码即可.
PS如果你想要所有的字段,例如https://ipapi.co/8.8.8.8/json/,响应是JSON.
查看“其他基本扩展”下的GeoIP功能。 http://php.net/manual/zh/book.geoip.php
我看到有很多答案,但没有人提到https://freegeoip.net/
你被允许了15,000 queries per hour.我认为在大多数情况下这已经足够了.否则,您应该考虑使用MaxMind GeoIP中的本地数据库.
Freegeoip是开源的,您可以在github上找到源代码,在本地部署它们并摆脱查询限制.
此外,服务提供纬度/经度/时区和其他有用的东西.
$country_code = trim(file_get_contents("http://ipinfo.io/{$ip_address}/country"))
Run Code Online (Sandbox Code Playgroud)
会给你国家代码。
| 归档时间: |
|
| 查看次数: |
199084 次 |
| 最近记录: |