2012-01-30 2 views
2

IP 주소에 따라 DB 사용자의 일반 영역/위치에 저장하기 위해 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']; 
    ?> 
당신은 내가 데이터를 수신하고 어떻게 여기에서 볼 수 있습니다

: 또 다른 옵션 (ipinfodb 사용) 여기에 첫 번째 대답을 사용하는 것이었다 http://api.hostip.info/get_html.php?ip=00.0.00.00

: Getting location details from IP in PHP을하지만, 심지어 어떤 데이터를 표시하지 않습니다, URL에 내 IP를 삽입하려고 할 때도 결과를 구문 분석 할 필요가 없으므로 위와 같이 변경했습니다.

답변

5

따라서 ipinfodb에 따르면 API 키에 가입해야합니다. 하지만 API class이 있는데 protected $apiKey = '';에 API 키를 부여한 후 getCountry($host)의 IP 주소를 받게됩니다. 또는 사용하지 않으려는 경우 XML 또는 JSON API를 사용할 수 있습니다.

UPDATE 1

또는 그 너무 열심히 당신을위한 경우, 다음 다른 서비스에서 줄 바꿈 구분자 (\ n)도 폭발 사용합니다. 또는 다른 서비스를 사용하십시오.

업데이트 2

보인다는 API 키가 필요하지 않습니다 연결 문제에 언급 geoPlugin, 그. 사용할 코드는 echo var_export(unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$ip)));입니다.

+0

에 대한 정보 column.more 정보에서 검색 한 배열을 보편화, 지금 것을 시도하지만 여전히 작동하지 않습니다 수 있습니다 ... 위 코드와 같은 코드를 다음과 같이 변경했습니다 :'$ 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"만 –

+0

geoPlugin을 사용해보세요. 저에게 효과적이라고 생각됩니다. – axiomer

+0

좋아, 지금 시도했지만 여전히 작동하지 않습니다 ... 이것은 사용중인 코드입니다 :'$ data = var_export (unserialize (file_get_contents ("http://www.geoplugin.net/php.gp ? ip = $ ip ")))); $ country = $ data [ 'geoplugin_countryCode']; $ city [ 'geoplugin_city']; ' –

0

줄 바꿈 구분 기호가있는 배열로 분할 한 다음 일련의 문자열 조작기로 제거 할 수 있습니다. 또는 json으로 데이터를 반환하는 서비스를 찾을 수 있습니다. 그 모든 것을 통해.

+0

멋진데, json으로 돌려주는 서비스를 아십니까? –

+0

예, JSON API는 다음 위치에 있습니다. http://ipinfodb.com/ip_location_api_json.php –

+0

part a : 샘플 코드를 표시하거나 링크 할 수 있습니까? 파트 b : axiomer 위의 내 의견을 참조하십시오, 거기에 json 점점하지만 여전히 작동하지 않습니다 ... –

1

주어진 결과가 객체 또는 배열이 아니기 때문에 단순히 $ data [ 'country']를 사용하면 작동하지 않습니다. 콘텐츠를 배열로 분할하거나 더 나은 JSON 개체로 검색 한 다음 사용해야합니다.

$data = json_decode($data); 

배열의 데이터를 제공 할 수 있습니다.

위의 내용에도 불구하고, 나는 매우 부정확하기 때문에 IP 주소에서 위치를 얻는 것을 권장하지 않습니다! 호스트 서버의 위치를 ​​반환하며 반드시 사용자의 위치는 아닙니다.

편집 :

json으로 API를 사용 http://ipinfodb.com/ip_location_api_json.php

업데이트 : 여기에 API 키를

  1. 등록 다음 JSON API를 구현하는

    단계 : http://ipinfodb.com/register.php. 이렇게하면 서버에서 결과를 검색 할 수 있지만 작동하지 않으면 결과를 검색 할 수 있습니다.

복사하여 다음과 같은 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를 사용하고 있습니다. –

+0

지역에 대해서도 정확하지 않습니다. 내 IP가 맨체스터 (Manchester)로 떠올랐다. 나는 200 마일 이상 떨어져있다! –

+0

굉장해! 그것은 우리의 목적에 더할 나위없이 좋습니다. –

0

은 당신이 만들 수

  • 당신은 정말 당신이 필요합니다 모든이있다,이 작업을 얻을 수있는 SDK를 구현 할 필요가 없습니다 이 같은 배열 :

    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 주소를 통해 저장 한 다음은이 테이블 열이 있습니다

    ip ::: info 
    

    는 당신은 DB에서 데이터를 검색하는 함수를 사용하고 php serialze 확인

  • 관련 문제