我正在尝试使用hostip,以便根据IP地址保存到DB用户的常规区域/位置。然而,我不知道如何从我收到的输出中解析数据。
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$data = json_decode(file_get_contents("http://api.hostip.info/get_html.php?ip=$ip")); //<-not sure how
$country = $data['Country'];
$city = $data['City'];
?>
你可以在这里看到我是如何接收数据的:http://api.hostip.info/get_html.php?ip=00.0.00.00
另一种选择是在这里使用第一个答案(使用ipinfodb):在PHP中从IP获取位置详细信息,但它甚至不显示任何数据,即使我尝试在url中插入我的IP,更不用说解析结果了,所以我改为上面的。
因此,根据ipinfodb,您必须注册API密钥。但它们有一个API类,即getCountry($host)
,在您将API密钥交给protected $apiKey = '';
后,它将获得IP的国家/地区。或者,如果您不想使用它们,您可以使用它们的XML或JSON API。
更新1
或者,如果这对你来说太难了,那么在另一个服务的换行符(''n)上使用爆炸符。或者,也许可以使用其他服务。
更新2
你链接的问题中提到的geoPlugin似乎不需要API密钥。他们要使用的代码是echo var_export(unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip)));
。
简单地使用$data['country']是行不通的,因为给定的结果不是对象或数组。您需要将内容拆分为一个数组,或者更好的是,将其作为JSON对象检索,然后使用:
$data = json_decode($data);
为您提供数组中的数据。
尽管如此,我不建议从IP地址中获取位置,因为它非常不准确!它返回主机服务器的位置,而不一定是用户的位置
编辑:
使用JSON API:http://ipinfodb.com/ip_location_api_json.php
更新:
实现JSON API的步骤:
- 在此处注册API密钥:http://ipinfodb.com/register.php.这将允许您从他们的服务器中检索结果,否则将无法工作
- 您不需要实现任何SDK即可实现此功能,因此您只需要以下内容:
复制并通过以下PHP代码:
// Set the parameters
$ip_address = $_SERVER['REMOTE_ADDR'];
$api_key = 'YOUR_API_KEY_HERE';
// Get the data
$data = file_get_contents("http://api.ipinfodb.com/v3/ip-city/?key=$api_key&ip=$ip_address&format=json");
// Decode the JSON result into an array
$data = json_decode($data);
// All data can now be accessed using the associative array $data
$country = $data['Country']; // Country
$city = $data['City']; // City
您可以用换行符拆分成一个数组,然后用一系列字符串操纵器清理它。。。或者,您可以找到一个以json形式返回数据的服务,这将完全减轻经历所有这些的痛苦。
您可以制作这样的数组:
array(
array(
'ip' => '0.0.0.0',
'country' => 'someplace',
'city' => 'somecity'm ,
'data' => 'somedata'),
array(
'ip' => '0.0.0.0',
'country' => 'someplace',
'city' => 'somecity'm ,
'data' => 'somedata'),
.
.
. );
然后序列化数组并通过数据库中的ip地址将其保存,然后您只需要2个表列:
ip ::: info
然后,您可以使用一个函数从db中检索数据,并通用化从info列中检索的数组。有关php serialize 的更多信息