사용자 도시의 독일어 이름을 표시하려고합니다. Maxmind Geoip의 무료 버전이 가능합니까? GeoLite2-City.mmdb 또는 GeoLiteCity.dat를 열어 내 도시 번역 서비스를 구축 할 도시를 찾는 방법을 찾지 못했습니다. 어떻게 열 수 있습니까?Maxmind GeoLite2를 통해 사용자 도시의 현지화 된 이름을 얻으십시오. 무료
답변
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");
생성자가 폴백 배열을 허용하지 않지만 작동합니다. 작곡가가 아닌 예가 있습니까? – morritza
두 번째 예제는 작곡가의 최신 버전으로 나와 함께 작동합니다. 내가 고친 닫히지 않은 인용문이 있었다. –
Composer가없는 예에서 가능한 한 PSR-0 오토로더를 사용하는 것이 가장 좋습니다. 또한 MaxMind DB API를 설치해야합니다. –
작성자없이 수행하는 방법은 다음과 같습니다. https://github.com/maxmind/MaxMind-DB-Reader-php
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
Kitchin은 작곡가없이 GeoLite2를 사용하는 방법에 대한 지침을 제공하여 기쁘게 생각합니다. 내가 지시 한대로 내 폴더 구조 설정을 가지고 있고, 정확히 말한대로 benchmark.php의 코드를 업데이트했다 ... 그러나 스크립트를 실행할 때 화면에 아무 것도 표시되지 않고 서버에 오류 로그 파일이 표시된다. PHP 치명적인 오류 : 'MaxMind \ Db \ Reader \ Util'클래스는 /SERVERPATH/foo/Db/Reader.php의 238 행에 없습니다 (* SERVERPATH는 서버 루트의 전체 경로 임). 왜 이것이 나를 위해 일하지 않는지에 대한 어떤 생각? 어떤 도움이라도 대단히 감사하게 될 것입니다! 감사! – Mark
마크, 게시물을 업데이트했습니다. MaxMind는 'Util.php'파일을 추가했습니다. – kitchin
신난다, 고맙다 Kitchin는 나의 실수를 고쳤다. 한 번 더 (멍청한) 질문 tho ... 사실 IP를 기반으로 한 국가를 반환하려면 어떻게해야합니까? $ reader = new Reader ... line 다음에는 $ place = $ reader-> country ('### ## ### ###')가 있습니다. (여기서 #는 실제 IP 주소입니다) 작동하지 않습니다. 나는 'country'를 'city'로 대체하려고 시도했지만 그 중 하나도 작동하지 않았습니다 ... 저는 그 무언가 간단하다고 확신합니다. 나라를 되찾기 위해 어떤 매개 변수를 사용해야하는지 잘 모르겠습니다. 감사! – Mark
나는 PHP 확장을 사용하는 것이 좋습니다 API에 관해서라면 performance에 관한 것입니다. PHP (C API) 확장을 사용하면 초당 700 만 개의 쿼리를 처리 할 수 있습니다.
내가 어떻게 여기 지역화 된 도시 이름을 얻기 위해 PHP의 MMDB 데이터베이스를 사용하는 확장을 컴파일하는 방법을 설명하고, :
데이터베이스는 독일 도시 이름이 포함되어 있습니다. 어떤 API를 사용하고 있습니까? –
.dat 파일을 사용하는 PHP API – morritza