您的位置:

php根据ip地址查地区,根据ip地址能查询哪些信息

本文目录一览:

php 怎么通过ip来获取所在位置

echo  getcposition(getIP());

function getIP(){

    if (isset($_SERVER)) {

        if (isset($_SERVER[HTTP_X_FORWARDED_FOR])) {

            $realip = $_SERVER[HTTP_X_FORWARDED_FOR];

        } elseif (isset($_SERVER[HTTP_CLIENT_IP])) {

            $realip = $_SERVER[HTTP_CLIENT_IP];

        } else {

            $realip = $_SERVER[REMOTE_ADDR];

        }

    } else {

        if (getenv("HTTP_X_FORWARDED_FOR")) {

            $realip = getenv( "HTTP_X_FORWARDED_FOR");

        } elseif (getenv("HTTP_CLIENT_IP")) {

            $realip = getenv("HTTP_CLIENT_IP");

        } else {

            $realip = getenv("REMOTE_ADDR");

        }

    }

    return $realip;

}

function getcposition($ip){

$res1 = file_get_contents("");

$res1 = json_decode($res1,true);

//print_r($res1);

  if ($res1[ "code"]==0){

return $res1['data']["country"].$res1['data'][ "region"].$res1['data']["city"]."_".$res1['data'][ "isp"];

}else{

return "未知";

}

?

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(';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'); //baidu.com IP地址

var_dump($ipInfos);

使用了新浪的开放API

PHP IP地址归属地查询的接口

function GetIpLookup($ip = ''){

$res = @file_get_contents(';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 = $this-GetIpLookup('222.223.191.12'); //baidu.com IP地址

var_dump($ipInfos);

高分求一段IP判断城市的PHP代码

?php

/**************************/

/******IP判断城市文件******/

/**************************/

$action=$_GET['action'];

if($action==ip){

if ($_SERVER["HTTP_X_FORWARDED_FOR"]){

$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];}

else if ($_SERVER["HTTP_CLIENT_IP"]){

$ip = $_SERVER["HTTP_CLIENT_IP"];}

else if ($_SERVER["REMOTE_ADDR"]){

$ip = $_SERVER["REMOTE_ADDR"];}

else if (getenv("HTTP_X_FORWARDED_FOR")){

$ip = getenv("HTTP_X_FORWARDED_FOR");}

else if (getenv("HTTP_CLIENT_IP")){

$ip = getenv("HTTP_CLIENT_IP");}

else if (getenv("REMOTE_ADDR")){

$ip = getenv("REMOTE_ADDR");}

else{

$ip = "Unknown";}

}

$dat_path = 'qqwry.dat';

//判断IP地址是否有效

if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$", $ip)){

return 'IP Address Invalid';

}

//打开IP数据库

if(!$fd = @fopen($dat_path, 'rb')){

return 'IP data file not exists or access denied';

}

//explode函数分解IP地址,运算得出整数形结果

$ip = explode('.', $ip);

$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];

//获取IP地址索引开始和结束位置

$DataBegin = fread($fd, 4);

$DataEnd = fread($fd, 4);

$ipbegin = implode('', unpack('L', $DataBegin));

if($ipbegin 0) $ipbegin += pow(2, 32);

$ipend = implode('', unpack('L', $DataEnd));

if($ipend 0) $ipend += pow(2, 32);

$ipAllNum = ($ipend - $ipbegin) / 7 + 1;

$BeginNum = 0;

$EndNum = $ipAllNum;

//使用二分查找法从索引记录中搜索匹配的IP地址记录

while($ip1num$ipNum || $ip2num$ipNum) {

$Middle= intval(($EndNum + $BeginNum) / 2);

//偏移指针到索引位置读取4个字节

fseek($fd, $ipbegin + 7 * $Middle);

$ipData1 = fread($fd, 4);

if(strlen($ipData1) 4) {

fclose($fd);

return 'File Error';

}

//提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂

$ip1num = implode('', unpack('L', $ipData1));

if($ip1num 0) $ip1num += pow(2, 32);

//提取的长整型数大于我们IP地址则修改结束位置进行下一次循环

if($ip1num $ipNum) {

$EndNum = $Middle;

continue;

}

//取完上一个索引后取下一个索引

$DataSeek = fread($fd, 3);

if(strlen($DataSeek) 3) {

fclose($fd);

return 'File Error';

}

$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));

fseek($fd, $DataSeek);

$ipData2 = fread($fd, 4);

if(strlen($ipData2) 4) {

fclose($fd);

return 'File Error';

}

$ip2num = implode('', unpack('L', $ipData2));

if($ip2num 0) $ip2num += pow(2, 32);

//找不到IP地址对应城市

if($ip2num $ipNum) {

if($Middle == $BeginNum) {

fclose($fd);

return 'No Data';

}

$BeginNum = $Middle;

}

}

$ipFlag = fread($fd, 1);

if($ipFlag == chr(1)) {

$ipSeek = fread($fd, 3);

if(strlen($ipSeek) 3) {

fclose($fd);

return 'System Error';

}

$ipSeek = implode('', unpack('L', $ipSeek.chr(0)));

fseek($fd, $ipSeek);

$ipFlag = fread($fd, 1);

}

if($ipFlag == chr(2)) {

$AddrSeek = fread($fd, 3);

if(strlen($AddrSeek) 3) {

fclose($fd);

return 'System Error';

}

$ipFlag = fread($fd, 1);

if($ipFlag == chr(2)) {

$AddrSeek2 = fread($fd, 3);

if(strlen($AddrSeek2) 3) {

fclose($fd);

return 'System Error';

}

$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));

fseek($fd, $AddrSeek2);

} else {

fseek($fd, -1, SEEK_CUR);

}

while(($char = fread($fd, 1)) != chr(0))

$ipAddr2 .= $char;

$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));

fseek($fd, $AddrSeek);

while(($char = fread($fd, 1)) != chr(0))

$ipAddr1 .= $char;

} else {

fseek($fd, -1, SEEK_CUR);

while(($char = fread($fd, 1)) != chr(0))

$ipAddr1 .= $char;

$ipFlag = fread($fd, 1);

if($ipFlag == chr(2)) {

$AddrSeek2 = fread($fd, 3);

if(strlen($AddrSeek2) 3) {

fclose($fd);

return 'System Error';

}

$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));

fseek($fd, $AddrSeek2);

} else {

fseek($fd, -1, SEEK_CUR);

}

while(($char = fread($fd, 1)) != chr(0)){

$ipAddr2 .= $char;

}

}

fclose($fd);

//返回IP地址对应的城市结果

if(preg_match('/http/i', $ipAddr2)) {

$ipAddr2 = '';

}

$ipaddr = "$ipAddr1 $ipAddr2";

$ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);

$ipaddr = preg_replace('/^s*/is', '', $ipaddr);

$ipaddr = preg_replace('/s*$/is', '', $ipaddr);

if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {

$ipaddr = 'No Data';

}

require_once("cityadd.php");

if(strpos($ipaddr,$hefei))

{

}

echo "var jstext='$hefei'"; //输出一句JS语句,生成一个JS变量,并赋颠值为PHP变量 $action的值

?

一下是cityadd.php的内容

?php

$hefei = "合肥市";

$wuhu = "芜湖市";

$huainan = "淮南市";

$maanshan = "马鞍山市";

$chuzhou = "滁州市";

$huaibei = "淮北市";

$tongling = "铜陵市";

$anqing = "安庆市";

$huangshan = "黄山市";

$fuyang = "阜阳市";

$bengbu = "蚌埠市";

$suzhou = "宿州市";

$luan = "六安市";

$bozhou = "亳州市";

$chizhou = "池州市";

$xuancheng = "宣城市";

$qita = "其他";

?

上网下一个qqwry.dat

这几个文件放在一个文件夹,做一个页面里面放一个JS,并且调用第一个文件的函数,就可以了

script document.write(jstext)/script

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;