设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 2330|回复: 1

ipip 纯真 数据库的简单调用方法 查询地址函数变量是什么

[复制链接]
 成长值: 246

签到天数: 4707 天

[LV.Master]伴坛终老

发表于 2016/2/8 05:26 | 显示全部楼层 |阅读模式 |Google Chrome 48.0.2564.103|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
纯真
  1. function convertip($ip)
复制代码



创建一个命名为cz88.class.php的文件,拉起代码例如
  1. <?
  2. /*
  3. $location = array($lang_functions['text_unknown'],"");
  4. 替换为
  5. $location = array(convertip($ip),"");
  6. */
  7. function convertip($ip) {
  8.     //IP数据文件路径
  9.     $dat_path = 'qqwry.dat';
  10.     //检查IP地址
  11.     if(!ereg("^([0-9]{1,3}.){3}[0-9]{1,3}$", $ip)){
  12.         return ;
  13.     }
  14.     //打开IP数据文件
  15.     if(!$fd = @fopen($dat_path, 'rb')){
  16.         return;
  17.     }
  18.     //分解IP进行运算,得出整形数
  19.     $ip = explode('.', $ip);
  20.     $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
  21.     //获取IP数据索引开始和结束位置
  22.     $DataBegin = fread($fd, 4);
  23.     $DataEnd = fread($fd, 4);
  24.     $ipbegin = implode('', unpack('L', $DataBegin));
  25.     if($ipbegin < 0) $ipbegin += pow(2, 32);
  26.     $ipend = implode('', unpack('L', $DataEnd));
  27.     if($ipend < 0) $ipend += pow(2, 32);
  28.     $ipAllNum = ($ipend - $ipbegin) / 7 + 1;
  29.     $BeginNum = 0;
  30.     $EndNum = $ipAllNum;
  31.     //使用二分查找法从索引记录中搜索匹配的IP记录
  32.     while($ip1num>$ipNum || $ip2num<$ipNum) {
  33.         $Middle= intval(($EndNum + $BeginNum) / 2);
  34.         //偏移指针到索引位置读取4个字节
  35.         fseek($fd, $ipbegin + 7 * $Middle);
  36.         $ipData1 = fread($fd, 4);
  37.         if(strlen($ipData1) < 4) {
  38.             fclose($fd);
  39.             return;
  40.         }
  41.         //提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂
  42.         $ip1num = implode('', unpack('L', $ipData1));
  43.         if($ip1num < 0) $ip1num += pow(2, 32);
  44.         //提取的长整型数大于我们IP地址则修改结束位置进行下一次循环
  45.         if($ip1num > $ipNum) {
  46.             $EndNum = $Middle;
  47.             continue;
  48.         }
  49.         //取完上一个索引后取下一个索引
  50.         $DataSeek = fread($fd, 3);
  51.         if(strlen($DataSeek) < 3) {
  52.             fclose($fd);
  53.             return;
  54.         }
  55.         $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
  56.         fseek($fd, $DataSeek);
  57.         $ipData2 = fread($fd, 4);
  58.         if(strlen($ipData2) < 4) {
  59.             fclose($fd);
  60.             return;
  61.         }
  62.         $ip2num = implode('', unpack('L', $ipData2));
  63.         if($ip2num < 0) $ip2num += pow(2, 32);
  64.         //没找到提示未知
  65.         if($ip2num < $ipNum) {
  66.             if($Middle == $BeginNum) {
  67.                 fclose($fd);
  68.                 return;
  69.             }
  70.             $BeginNum = $Middle;
  71.         }
  72.     }
  73.     //下面的代码读晕了,没读明白,有兴趣的慢慢读
  74.     $ipFlag = fread($fd, 1);
  75.     if($ipFlag == chr(1)) {
  76.         $ipSeek = fread($fd, 3);
  77.         if(strlen($ipSeek) < 3) {
  78.             fclose($fd);
  79.             return;
  80.         }
  81.         $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
  82.         fseek($fd, $ipSeek);
  83.         $ipFlag = fread($fd, 1);
  84.     }
  85.     if($ipFlag == chr(2)) {
  86.         $AddrSeek = fread($fd, 3);
  87.         if(strlen($AddrSeek) < 3) {
  88.             fclose($fd);
  89.             return;
  90.         }
  91.         $ipFlag = fread($fd, 1);
  92.         if($ipFlag == chr(2)) {
  93.             $AddrSeek2 = fread($fd, 3);
  94.             if(strlen($AddrSeek2) < 3) {
  95.                 fclose($fd);
  96.                 return;
  97.             }
  98.             $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
  99.             fseek($fd, $AddrSeek2);
  100.         } else {
  101.             fseek($fd, -1, SEEK_CUR);
  102.         }
  103.         while(($char = fread($fd, 1)) != chr(0))
  104.             $ipAddr2 .= $char;
  105.         $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
  106.         fseek($fd, $AddrSeek);
  107.         while(($char = fread($fd, 1)) != chr(0))
  108.             $ipAddr1 .= $char;
  109.     } else {
  110.         fseek($fd, -1, SEEK_CUR);
  111.         while(($char = fread($fd, 1)) != chr(0))
  112.             $ipAddr1 .= $char;
  113.         $ipFlag = fread($fd, 1);
  114.         if($ipFlag == chr(2)) {
  115.             $AddrSeek2 = fread($fd, 3);
  116.             if(strlen($AddrSeek2) < 3) {
  117.                 fclose($fd);
  118.                 return;
  119.             }
  120.             $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
  121.             fseek($fd, $AddrSeek2);
  122.         } else {
  123.             fseek($fd, -1, SEEK_CUR);
  124.         }
  125.         while(($char = fread($fd, 1)) != chr(0)){
  126.             $ipAddr2 .= $char;
  127.         }
  128.     }
  129.     fclose($fd);
  130.     //最后做相应的替换操作后返回结果
  131.         
  132.         $ipAddr1=mb_convert_encoding($ipAddr1,"utf-8","gb2312".',auto');
  133.         $ipAddr2=mb_convert_encoding($ipAddr2,"utf-8","gb2312".',auto');
  134.         
  135.        if(preg_match('/http/i', $ipAddr2)) {
  136.         $ipAddr2 = '';
  137.     }
  138.         
  139.          if(preg_match('/大学/i', $ipAddr1)) {
  140.         $ipAddr2 = '';
  141.                 $ipAddr1 =preg_replace("/大学.*/is", "", $ipAddr1)."大学";
  142.     }elseif(preg_match('/大学/i', $ipAddr2)) {
  143.         $ipAddr1 = '';
  144.                 $ipAddr2 =preg_replace("/大学.*/is", "", $ipAddr2)."大学";
  145.     }
  146.         
  147.         if(preg_match('/学院/i', $ipAddr1)) {
  148.         $ipAddr2 = '';
  149.                 $ipAddr1 =preg_replace("/学院.*/is", "", $ipAddr1)."学院";
  150.     }elseif(preg_match('/学院/i', $ipAddr2)) {
  151.         $ipAddr1 = '';
  152.                 $ipAddr2 =preg_replace("/学院.*/is", "", $ipAddr2)."学院";
  153.     }
  154.         
  155.         
  156.         
  157.         
  158.     $ipaddr = str_replace(" ", "",$ipAddr1.$ipAddr2);
  159.         
  160.         
  161.         
  162.     $ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);
  163.     $ipaddr = preg_replace('/^s*/is', '', $ipaddr);
  164.     $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
  165.     if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {
  166.          return "IPV4";
  167.     }   
  168.         
  169.     return ($ipaddr);
  170. }
复制代码



使用打印
echo convertip('91.121.255.214');
//输出: 法国巴黎OVHSAS数据中心

实例
  1. <?php
  2. header('Content-Type: text/plain; charset=utf-8');
  3. include_once('cz88.class.php');
  4.     $ip="";
  5.     header('Content-Type: text/plain; charset=utf-8');
  6.     if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  7.         $ip=$_SERVER['HTTP_CLIENT_IP'];
  8.     } elseif (!empty($_SERVER['X-Real-IP'])) {
  9.         $ip=$_SERVER['X-Real-IP'];
  10.     } elseif (!empty($_SERVER['CF-Connecting-IP'])) {
  11.         $ip=$_SERVER['CF-Connecting-IP'];
  12.     } else {
  13.         $ip=$_SERVER['REMOTE_ADDR'];
  14.     }
  15.     echo $ip=preg_replace("/^::ffff:/", "", $ip);
  16.     echo "\n";
  17.     echo '纯真IP 数据:';echo convertip($ip);
复制代码









ipip
  1. IP::find('x.x.x.x')
复制代码



php使用方法例如,参考,注意文件编码utf-8,ipip安装包已经自带IP.class.php解析文件,引用即可
  1. <?php
  2. header('Content-Type: text/plain; charset=utf-8');
  3. include_once('IP.class.php');
  4. print_r(IP::find('119.29.29.29'));
  5. print_r(IP::find($_SERVER['REMOTE_ADDR']));
  6. echo 'IPIP.net 数据:'.join('',IP::find($_SERVER['REMOTE_ADDR']));
复制代码



实例
  1. <?php
  2. header('Content-Type: text/plain; charset=utf-8');
  3. include_once('IP.class.php');
  4.     $ip="";
  5.     header('Content-Type: text/plain; charset=utf-8');
  6.     if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
  7.         $ip=$_SERVER['HTTP_CLIENT_IP'];
  8.     } elseif (!empty($_SERVER['X-Real-IP'])) {
  9.         $ip=$_SERVER['X-Real-IP'];
  10.     } elseif (!empty($_SERVER['CF-Connecting-IP'])) {
  11.         $ip=$_SERVER['CF-Connecting-IP'];
  12.     } else {
  13.         $ip=$_SERVER['REMOTE_ADDR'];
  14.     }
  15.     echo "您当前的IP:";
  16.     echo $ip=preg_replace("/^::ffff:/", "", $ip);
  17.     echo "\n";
  18.     echo 'IPIP.net 数据:'.join('',IP::find($ip));
复制代码


欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 1164 天

[LV.10]以坛为家III

发表于 2016/2/9 00:38 | 显示全部楼层 |Google Chrome 27.0.1453.93|Windows XP
我本来想水一下。结果被扣了3威望。。。我哭了··
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2024/11/23 20:27 , Processed in 0.152169 second(s), 23 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表