本文目录一览:
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;