根据IP地址将位置保存到数据库


Save Location to DB based on IP address

我正在尝试使用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的步骤:

  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

您可以用换行符拆分成一个数组,然后用一系列字符串操纵器清理它。。。或者,您可以找到一个以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 的更多信息