2014-01-10 4 views
1

사용자 도시의 독일어 이름을 표시하려고합니다. Maxmind Geoip의 무료 버전이 가능합니까? GeoLite2-City.mmdb 또는 GeoLiteCity.dat를 열어 내 도시 번역 서비스를 구축 할 도시를 찾는 방법을 찾지 못했습니다. 어떻게 열 수 있습니까?Maxmind GeoLite2를 통해 사용자 도시의 현지화 된 이름을 얻으십시오. 무료

+0

데이터베이스는 독일 도시 이름이 포함되어 있습니다. 어떤 API를 사용하고 있습니까? –

+0

.dat 파일을 사용하는 PHP API – morritza

답변

2

GeoIP 레거시 데이터베이스에는 지역화 된 이름이 포함되어 있지 않지만 GeoIP2 (또는 GeoLite2) 데이터베이스는 해당됩니다.

<?php 
require_once 'vendor/autoload.php'; 
use GeoIp2\Database\Reader; 

$reader = new Reader('/usr/local/share/GeoIP/GeoLite2-City.mmdb'); 

$record = $reader->city('128.101.101.101'); 

print($record->country->names['de'] . "\n"); 

을 또는 당신이 독일어로 기본 설정하고 사용할 수없는 경우 영어로 다시 독자를 좋아하면 생성자 언어를 설정할 수 있습니다 : : 다음과 같이 지역화 된 이름을 액세스 할 수

<?php 
require_once 'vendor/autoload.php'; 
use GeoIp2\Database\Reader; 

$reader = new Reader('/usr/local/share/GeoIP/GeoLite2-City.mmdb', array('de', 'en')); 

$record = $reader->city('128.101.101.101'); 

print($record->country->name . "\n"); 
+0

생성자가 폴백 배열을 허용하지 않지만 작동합니다. 작곡가가 아닌 예가 있습니까? – morritza

+0

두 번째 예제는 작곡가의 최신 버전으로 나와 함께 작동합니다. 내가 고친 닫히지 않은 인용문이 있었다. –

+0

Composer가없는 예에서 가능한 한 PSR-0 오토로더를 사용하는 것이 가장 좋습니다. 또한 MaxMind DB API를 설치해야합니다. –

8

작성자없이 수행하는 방법은 다음과 같습니다. https://github.com/maxmind/MaxMind-DB-Reader-php

  • 는 (도시 또는 국가 또는 둘 다) 여기에 데이터 파일을 다운로드 : http://dev.maxmind.com/geoip/geoip2/geolite2/
  • 압축 해제 데이터 파일을하고, 새로운 디렉토리에 foo을 넣어
    • 여기에 우편 DB-Reader를 다운로드합니다.
    • DB-Reader의 경우 examples/benchmark.php에서 foo/benchmark.php까지 복사하십시오.
    • DB-Reader의 경우 src/MaxMind/Db부터 foo/Db까지 복사하십시오.
    • 편집 foo/benchmark.php.

    변경 :

    require_once '../vendor/autoload.php'; 
    use MaxMind\Db\Reader; 
    $reader = new Reader('GeoIP2-City.mmdb'); 
    

    하려면 :

    require_once __DIR__ . '/' . 'Db/Reader.php'; 
    require_once __DIR__ . '/' . 'Db/Reader/Decoder.php'; 
    require_once __DIR__ . '/' . 'Db/Reader/InvalidDatabaseException.php'; 
    require_once __DIR__ . '/' . 'Db/Reader/Metadata.php'; 
    require_once __DIR__ . '/' . 'Db/Reader/Util.php';  // new 2014/09 
    use MaxMind\Db\Reader; 
    $mmdb= true ? 'GeoLite2-City.mmdb' : 'GeoLite2-Country.mmdb'; 
    $reader = new Reader(__DIR__ . '/' . $mmdb); 
    

    당신은 5.3+ PHP가 필요합니다. Composer를 사용할 때보 다 코드 및 파일 수가 약간 절약됩니다. (일부 테스트 코드는 전체 Guzzle 구조와 함께 제거됩니다.) 또한 클래스가 네임 스페이스 용으로 만 사용되는 경우 PHP에서 네임 스페이스가 클래스에서 어떻게 작동하는지 명확하게 보여줍니다.

    나머지 benchmark.php은 버리고 $reader->get()을 사용할 수 있습니다.

    벤치 마크를 수행하려는 경우 대부분의 플랫폼에서 rand() 호출을 수정해야합니다.

    변경 :

    $ip = long2ip(rand(0, pow(2, 32) -1)); 
    

    에 :

    $n= (float)mt_rand(0, pow(2, 31) - 1); 
    if (mt_rand(0,1)) $n+= pow(2, 31); 
    $ip = long2ip($n); 
    

    을하거나 '의와의'네 mt_rand(0,255) 가입 ', 아마도 쉽게하는이보십시오.!

    ........................ 편집 2014/09 .............. ..........

    위의 'Db/Reader/Util.php'를 추가했습니다.MaxMind-DB-리더 - PHP의

    버전 : 1.0.0 (2014년 9월 22일)

    파일 구조는 다음과 같아야합니다

    ./benchmark.php 
    ./GeoLite2-City.mmdb 
    ./GeoLite2-Country.mmdb 
    ./Db/Reader.php 
    ./Db/Reader/Decoder.php 
    ./Db/Reader/InvalidDatabaseException.php 
    ./Db/Reader/Metadata.php 
    ./Db/Reader/Util.php 
    
  • +0

    Kitchin은 작곡가없이 GeoLite2를 사용하는 방법에 대한 지침을 제공하여 기쁘게 생각합니다. 내가 지시 한대로 내 폴더 구조 설정을 가지고 있고, 정확히 말한대로 benchmark.php의 코드를 업데이트했다 ... 그러나 스크립트를 실행할 때 화면에 아무 것도 표시되지 않고 서버에 오류 로그 파일이 표시된다. PHP 치명적인 오류 : 'MaxMind \ Db \ Reader \ Util'클래스는 /SERVERPATH/foo/Db/Reader.php의 238 행에 없습니다 (* SERVERPATH는 서버 루트의 전체 경로 임). 왜 이것이 나를 위해 일하지 않는지에 대한 어떤 생각? 어떤 도움이라도 대단히 감사하게 될 것입니다! 감사! – Mark

    +1

    마크, 게시물을 업데이트했습니다. MaxMind는 'Util.php'파일을 추가했습니다. – kitchin

    +1

    신난다, 고맙다 Kitchin는 나의 실수를 고쳤다. 한 번 더 (멍청한) 질문 tho ... 사실 IP를 기반으로 한 국가를 반환하려면 어떻게해야합니까? $ reader = new Reader ... line 다음에는 $ place = $ reader-> country ('### ## ### ###')가 있습니다. (여기서 #는 실제 IP 주소입니다) 작동하지 않습니다. 나는 'country'를 'city'로 대체하려고 시도했지만 그 중 하나도 작동하지 않았습니다 ... 저는 그 무언가 간단하다고 확신합니다. 나라를 되찾기 위해 어떤 매개 변수를 사용해야하는지 잘 모르겠습니다. 감사! – Mark

    0

    나는 PHP 확장을 사용하는 것이 좋습니다 API에 관해서라면 performance에 관한 것입니다. PHP (C API) 확장을 사용하면 초당 700 만 개의 쿼리를 처리 할 수 ​​있습니다.

    내가 어떻게 여기 지역화 된 도시 이름을 얻기 위해 PHP의 MMDB 데이터베이스를 사용하는 확장을 컴파일하는 방법을 설명하고, :

    Intro to Maxmind GeoLite2 with Kohana PHP

    Geolocate IP Address

    관련 문제