‘壹’ php用IP查询归属地
class ip_location
{
function init()
{
$this->wrydat = 'ip_area.dat';
$this->fp = fopen($this->wrydat, 'rb');
$this->getipnumber();
$this->getwryversion();
$this -> REDIRECT_MODE_0 = 0;
$this -> REDIRECT_MODE_1 = 1;
$this -> REDIRECT_MODE_2 = 2;
}
function get($str)
{
return $this->$str;
}
function set($str,$val)
{
$this->$str = $val;
}
function getbyte($length,$offset=null)
{
!is_null($offset) && fseek($this->fp, $offset, SEEK_SET);
return fread($this->fp, $length);
}
function packip($ip)
{
return pack('N', intval(ip2long($ip)));
}
function getlong($length=4, $offset=null)
{
$chr=null;
for($c=0;$length%4!=0&&$c<(4-$length%4);$c++)
{
$chr .= chr(0);
}
$var = unpack( 'Vlong', $this->getbyte($length, $offset).$chr);
return $var['long'];
}
function getwryversion()
{
$length = preg_match("/coral/i",$this->wrydat)?26:30;
$this->wrydat_version = $this->getbyte($length, $this->firstip-$length);
}
function getipnumber()
{
$this->firstip = $this->getlong();
$this->lastip = $this->getlong();
$this->ipnumber = ($this->lastip-$this->firstip)/7+1;
}
function getstring($data='', $offset=NULL)
{
$char = $this->getbyte(1,$offset);
while(ord($char) > 0)
{
$data .= $char;
$char = $this->getbyte(1);
}
return $data;
}
function iplocaltion($ip)
{
$ip = $this->packip($ip);
$low = 0;
$high = $this->ipnumber-1;
$ipposition = $this->lastip;
while($low <= $high)
{
$t = floor(($low+$high)/2);
if($ip < strrev($this->getbyte(4,$this->firstip+$t*7)))
$high = $t - 1;
else
{
if($ip > strrev($this->getbyte(4,$this->getlong(3))))
$low = $t + 1;
else
{
$ipposition = $this->firstip+$t*7;
break;
}
}
}
return $ipposition;
}
function getarea()
{
$b = $this->getbyte(1);
switch(ord($b))
{
case $this -> REDIRECT_MODE_0 :
return '';
break;
case $this -> REDIRECT_MODE_1:
case $this -> REDIRECT_MODE_2:
return $this->getstring('',$this->getlong(3));
break;
default:
return $this->getstring($b);
break;
}
}
function getiplocation($ip)
{
$ippos = $this->iplocaltion($ip);
$this->ip_range_begin = long2ip($this->getlong(4,$ippos));
$this->ip_range_end = long2ip($this->getlong(4,$this->getlong(3)));
$b = $this->getbyte(1);
switch(ord($b))
{
case $this -> REDIRECT_MODE_1:
$b = $this->getbyte(1,$this->getlong(3));
if(ord($b) == $this -> REDIRECT_MODE_2)
{
$countryoffset = $this->getlong(3);
$this->area = $this->getarea();
$this->country = $this->getstring('',$countryoffset);
}
else
{
$this->country = $this->getstring($b);
$this->area = $this->getarea();
}
break;
case $this -> REDIRECT_MODE_2:
$countryoffset = $this->getlong(3);
$this->area = $this->getarea();
$this->country = $this->getstring('',$countryoffset);
break;
default:
$this->country = $this->getstring($b);
$this->area = $this->getarea();
break;
}
}
}
---------------------------------------------------------------
调用方法:
$iploca = new ip_location;
$iploca -> init();
$iploca -> getiplocation($ip);
$area['country'] = str_replace(array('CZ88.NET'), '', $iploca -> get('country'));
$area['area'] = str_replace(array('CZ88.NET'), '', $iploca -> get('area'));
$area['country']=='' && $area['country']='未知';
$area['area']=='' && $area['area']='未知';
return $area;
‘贰’ php的 ip 定位,经纬度至少精确到镇,附上源码和详解
ip定位一般对于电脑来说的,精确到镇有点难,淘宝的ip api服务,只能精确到区,或者市
手机的话,你需要获取位置,位置会因为手机质量的好坏,偏差很大,苹果和诺基亚手机定位很准,安卓各种机型,各种偏差,使用手机定位的是,html5有获取定位的方法,然后得到经纬度,发到网络地图 api,获取更精确的地址,
ip定位想要那么精确,有点难,你得找个好点的ip库服务,达到你要的精读就行
‘叁’ php获取了ip地址,用php怎么获取ip的地理位置请大虾赐教!
用纯真ip数据库啊,这里有个资料是介绍php操作纯真ip数据库的,是原查询吧query8.com里提取出来的,用时先去网上搜纯真ip数据库下载,查询吧php版读取纯真ip数据库源码http://www.phperz.com/code/php-class/060913H20081372.html
‘肆’ php怎么获取当前地理位置
采用PHP向腾讯发送http get request,然后获取相应,获得相应结果后,将结果用正则表达式将需要的地理位置信息提取出来就OK了。当然,PHP发送get请求的方法有很多,我用curl来模拟http请求的方法
Curl是PHP的一个扩展,进行测试之前,先确认PHP已经加载了curl扩展。打开PHP配置文件php.ini,搜索 “extension=php_curl.dll”,将其前面的分号(;)去掉,然后重启HTTP服务器,查看phpinfo(),若能看到curl的信 息,说明PHP扩展curl成功
‘伍’ php 怎么获取记录ip所在地
<?php
header('Content-Type:text/html;Charset=utf-8');
function GetIp(){
$realip = '';
$unknown = 'unknown';
if (isset($_SERVER)){
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach($arr as $ip){
$ip = trim($ip);
if ($ip != 'unknown'){
$realip = $ip;
break;
}
}
}else if(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], $unknown)){
$realip = $_SERVER['HTTP_CLIENT_IP'];
}else if(isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)){
$realip = $_SERVER['REMOTE_ADDR'];
}else{
$realip = $unknown;
}
}else{
if(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), $unknown)){
$realip = getenv("HTTP_X_FORWARDED_FOR");
}else if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), $unknown)){
$realip = getenv("HTTP_CLIENT_IP");
}else if(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), $unknown)){
$realip = getenv("REMOTE_ADDR");
}else{
$realip = $unknown;
}
}
$realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;
return $realip;
}
function GetIpLookup($ip = ''){
if(empty($ip)){
$ip = GetIp();
}
$res = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip);
if(empty($res)){ return false; }
$jsonMatches = array();
preg_match('#\{.+?\}#', $res, $jsonMatches);
if(!isset($jsonMatches[0])){ return false; }
$json = json_decode($jsonMatches[0], true);
if(isset($json['ret']) && $json['ret'] == 1){
$json['ip'] = $ip;
unset($json['ret']);
}else{
return false;
}
return $json;
}
$ipInfos = GetIpLookup('123.125.114.144'); //.com IP地址
var_mp($ipInfos);
使用了新浪的开放API
‘陆’ php获取地理信息
新浪的是在 微博应用中有地理信息接口,通过经纬度查询来获取,不过需要先建立一个微博应用才可以使用(根据地理信息坐标返回实际地址 )
网络/google 的是在地图接口里面提供的
简单的说就是程序通过它们(网络、sina )的接口查询指定地理位置信息,至于地理信息数据从哪里得来就不知道了,也没有发现规律。
‘柒’ php 怎么通过ip来获取所在位置
可以使用第三方接口 比如网络地图 它可以通过ip来定位用户的经纬度坐标 有了坐标就可以直接定位用户所在城市和具体位置
‘捌’ php根据经纬度获取地理位置
这种功能,只能调用第三方的接口了,网络地图API就有这个接口addressComponents,逆地址解析,参考方法如下:
<GeocoderSearchResponse>
<status>OK</status>
<result>
<location>
<lat>38.990998</lat>
<lng>103.645966</lng>
</location>
<formatted_address>甘肃省武威市民勤县</formatted_address>
<business/>
<addressComponent>
<streetNumber/>
<street/>
<district>民勤县</district>
<city>武威市</city>
<province>甘肃省</province>
</addressComponent>
<cityCode>118</cityCode>
</result>
</GeocoderSearchResponse>
‘玖’ php利用第三方接口获取真实ip地址输出
不是我不想给你复制代码是网络不让我提交,你自己照着打吧
‘拾’ php如何实现通过ip获取地理位置
通过ip地址定位接口,调用的网络地图接口,每人每天有30000次免费调用机会。。
你可以调用我的接口,但不要多次调用。最好是按照我这篇文章中的方法自己搭建一个接口,毕竟我的接口很有可能无法实现你的要求。
着作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。