2012-01-30 69 views
2

我想,以保存到数据库用户的一般面积/位置使用主机IP,按IP地址。但我不知道如何解析我收到的输出中的数据。保存位置为DB基于IP地址

<?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,但它甚至不显示任何数据,即使我尝试在URL中插入我的IP,更不用说解析结果了,所以我改为上面的。

回答

5

因此,根据ipinfodb,你将不得不注册一个API密钥。但他们有一个API class,这是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)));

+0

好吧,现在我试过了,但它仍然是不工作...我使用与上面相同的代码进行以下更改:'$ iplookup =“http://api.ipinfodb.com/v3/ip-city/?key= &ip = $ ip”; $ data = json_decode(file_get_contents($ iplookup)); $ country = $ data ['CountryCode']; $ city = $ data ['CityName']; '但我仍然没有收到数据。只有“O”和“O”为每个 – 2012-01-30 19:43:53

+0

尝试geoPlugin,这似乎为我工作。 – axiomer 2012-01-30 19:48:33

+0

好吧,我现在试过,但它仍然不工作......这是我使用的代码:'$ data = var_export(unserialize(file_get_contents(“http://www.geoplugin.net/php.gp ?IP = $ IP“))); $ country = $ data ['geoplugin_countryCode']; $ data = unserialize(file_get_contents(“http://www.geoplugin.net/php.gp?ip=”。$ ip));} $ city = $ data ['geoplugin_city'];' – 2012-01-30 19:55:16

0

那么可以拆分为以换行分隔符的数组,然后用一系列字符串操纵的擦洗...或者你可以找到一个服务,将返回的数据作为JSON,这将完全缓解之苦通过所有这一切。

+0

酷,你知道一个服务,它返回它为JSON? – 2012-01-30 19:31:35

+0

是的,JSON API位于:http://ipinfodb.com/ip_location_api_json.php – 2012-01-30 19:35:35

+0

第一部分:你能显示/链接到示例代码吗? b部分:看到我对上面的axiomer的评论,我得到json那里,但它仍然不工作... – 2012-01-30 19:45:06

1

只需用$数据[“国家”]不会工作,因为给定的结果是不是一个对象或数组。您需要将内容分割成一个阵列或者甚至更好,找回它作为一个JSON对象,然后使用:

$data = json_decode($data); 

为了让你在一个阵列中的数据。

尽管如此,我不会建议让地方从IP地址,因为它是非常不准确的!它返回主机服务器的位置,不一定是用户的位置。

编辑:

使用JSON API:http://ipinfodb.com/ip_location_api_json.php

更新:

步骤来实现JSON API:这里

  1. 注册API密钥:http://ipinfodb.com/register.php。这将允许你从他们的服务器检索结果,没有这个将不起作用。
  2. 你并不需要实现任何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 
+0

我不需要精确的位置,只是区域,因此我现在使用ip地址 – 2012-01-30 19:49:44

+0

尽管这个地区甚至不准确。我的知识产权来自曼彻斯特,我距离200多英里! – 2012-01-30 19:52:04

+0

真棒!这对我们的目的来说非常重要。 – 2012-01-30 19:57:27

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 

那么你可以使用一个函数来从数据库取回数据和普及,从信息检索column.more信息的阵列约php serialze