Сохранить местоположение в БД на основе IP-адреса - PullRequest
2 голосов
/ 30 января 2012

Я пытаюсь использовать hostip для сохранения в общей области / местоположении пользователя БД в соответствии с 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): Получение сведений о местоположении из IP в PHP , но он даже не отображает никаких данных, даже когда я пытаюсь вставить свой IP в url, не говоря уже о парсинге результатов, поэтому я перешел на вышеперечисленное.

Ответы [ 4 ]

5 голосов
/ 30 января 2012

Итак, согласно ipinfodb , вам придется подписаться на ключ API. Но у них есть класс API , который getCountry($host) получит страну IP после того, как вы дали protected $apiKey = ''; ваш ключ API. Или, если вы не хотите использовать это, вы можете использовать их XML или JSON API.

ОБНОВЛЕНИЕ 1

Или, если это слишком сложно для вас, используйте разнесение на разделителе новой строки (\ n) в другом сервисе. Или, возможно, использовать другой сервис.

ОБНОВЛЕНИЕ 2

Похоже, что geoPlugin , упомянутый в связанном вопросе, не требует ключа API. Их код для использования: echo var_export(unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip)));.

1 голос
/ 30 января 2012

Простое использование $ 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
0 голосов
/ 30 января 2012

вы можете сделать массив следующим образом:

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 

затем вы можете использовать функцию для извлечения данных из базы данных и универсализации массива, извлеченного из столбца информации. Больше информации о php serialze

0 голосов
/ 30 января 2012

Вы можете разделить массив с разделителем новой строки, а затем очистить его с помощью ряда строковых манипуляторов ... или вы можете найти сервис, который будет возвращать данные в виде json, что полностью облегчит задачу прохождения. все это.

...