我正在尝试使用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):Getting location details from IP in PHP,但它甚至不显示任何数据,即使我尝试在网址中插入我的IP,更不用说解析结果了,所以我改变了上面的内容。
答案 0 :(得分:5)
因此,根据ipinfodb,您必须注册API密钥。但他们有API class,getCountry($host)
在您提供{1}} API密钥后会获得IP的国家/地区。或者,如果您不想使用它,您可以使用他们的XML或他们的JSON API。
更新1
或者,如果这对您来说太难了,那么请在其他服务的换行符分隔符(\ n)上使用explode。或者,也许使用其他服务。
更新2
似乎您链接的问题中提到的geoPlugin不需要API密钥。他们使用的代码是protected $apiKey = '';
。
答案 1 :(得分:1)
简单地使用$ data ['country']将无效,因为给定的结果不是对象或数组。您需要将内容拆分为数组,或者更好的是,将其作为JSON对象检索,然后使用:
$data = json_decode($data);
为您提供数组中的数据。
尽管如此,我还是不建议从IP地址获取位置,因为它非常不准确!它返回主机服务器的位置,而不一定是用户的位置。
修改强>
使用JSON API:http://ipinfodb.com/ip_location_api_json.php
<强>更新强>
实施JSON API的步骤:
复制并通过以下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
答案 2 :(得分:0)
你可以拆分成一个带换行符分隔符的数组,然后用一系列字符串操纵器擦除它......或者你可以找到一个将数据作为json返回的服务,这将完全缓解经历的痛苦所有这些。
答案 3 :(得分:0)
你可以制作这样的数组:
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 serialze的更多信息