1
나는 csv geoip lite를 http://www.maxmind.com/app/geolitecountry에서 다운로드했습니다.지오 코드 우편 쿼리
블록 : startIP, endIP, locid 나는 다음과 같은 테이블로 내 DB로 데이터를 가져옵니다. 위치 : locid, 국가, 지역, 도시, 긴 을 PostalCode, 위도, 충족, areacode.
IPNUM를 생성하는 코드는 다음과 같습니다
는<? $ip =$_SERVER['REMOTE_ADDR'];
list($w, $x, $y, $z) = explode('.', $ip);
$one = 16777216* $w;
$two = 65536* $x ;
$three = 256*$y;
$ipnum = $one + $two+ $three + $z;
?>
다음 내 질문은 : 69.63.184.142의 IP에 대한
SELECT postalcode FROM location WHERE locid =(SELECT locid FROM blocks WHERE startIP <= '$ipnum' AND endIP>= '$ipnum' LIMIT 1)
의 IPNUM는 데시벨이하는 1161803918. 같다 쿼리를 반환하지만, 위치는 호주 출신이며 ip는 호주에 없다.
지오프 (geoip)에 익숙한 사람들은 수식이 잘못 될 때까지 내가 잘못하고있는 것입니까?
나는 geoip에 익숙하지 않지만, 내가 우연히 마주 쳤던 한 가지 점은 그들이 호스트 순서로있을 것으로 예상 할 때 네트워크 순서대로 beeing했다는 것입니다. 이것은 단지 추측이지만, 시도해 볼 수 있습니다. 단지 바이트의 순서를 바꿔서 (즉, $ z * 16777216, $ y * 65536, ...) –
그냥 시도해 보았습니다. 제안을 주셔서 감사합니다.하지만 여전히 주사위가 없습니다 – Ryan
GeoIP에 대해 많이 알지는 못하지만 PHP의 내장 [ip2long] (http://php.net/manual/en/function.ip2long.php) 기능을 힘들게 구현 한 것 같아요 :) –