设为首页收藏本站

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

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 5600|回复: 15

NexusPHP源码假设的PT站添加IP地址显示的方法

[复制链接]
 成长值: 333

签到天数: 4736 天

[LV.Master]伴坛终老

发表于 2013/1/5 23:17 | 显示全部楼层 |阅读模式
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
1.png

2.png

注:php5.6.18因为更新一些安全问题费用一系列函数,会导致无法使用,php5.6.11测试正常。
1.png

include/functions.php搜索
  1. $location = array($lang_functions['text_unknown'],"");
复制代码
替换为
  1. $location = array(convertip($ip),"");
复制代码
然后再最尾部加上
  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 = 'include/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. }
复制代码
下载纯真IP数据库:http://update.cz88.net/soft/ip_setup.exe

根目录的qqwry.dat上传到include目录,即可完成显示
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

签到天数: 16 天

[LV.4]偶尔看看III

发表于 2013/1/6 13:59 | 显示全部楼层
不要显示ip行么
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 333

签到天数: 4736 天

[LV.Master]伴坛终老

发表于 2013/1/6 18:32 | 显示全部楼层
猫子 发表于 2013/1/6 13:59
不要显示ip行么

我看看。
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 333

签到天数: 4736 天

[LV.Master]伴坛终老

发表于 2013/1/6 19:24 | 显示全部楼层
猫子 发表于 2013/1/6 13:59
不要显示ip行么

感觉客户端本身上面就能显示IP了,这样调用到网站上不是方便点么,难道我奇葩

点评

你真的奇葩了,别的站都不嫌ip的  发表于 2013/1/6 21:29
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 74 天

[LV.6]常住居民II

发表于 2013/1/6 19:35 | 显示全部楼层
小樱 发表于 2013/1/6 19:24
感觉客户端本身上面就能显示IP了,这样调用到网站上不是方便点么,难道我奇葩

有种查水表的感觉= =
[发帖际遇]: 依听忆昔 发帖时在路边捡到 4 樱币,偷偷放进了口袋. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 333

签到天数: 4736 天

[LV.Master]伴坛终老

发表于 2013/1/6 22:51 | 显示全部楼层
依听忆昔 发表于 2013/1/6 19:35
有种查水表的感觉= =

....这样不是方便看是电信还是联通什么的么,好确定是否能链接

点评

感觉是个不实用的东东  发表于 2013/1/6 23:30
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 74 天

[LV.6]常住居民II

发表于 2013/1/6 23:31 | 显示全部楼层
还有流量条好像有问题。。明显花了
[发帖际遇]: 依听忆昔 乐于助人,奖励 10 贡献. 幸运榜 / 衰神榜
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 333

签到天数: 4736 天

[LV.Master]伴坛终老

发表于 2013/1/6 23:37 | 显示全部楼层
依听忆昔 发表于 2013/1/6 23:31
还有流量条好像有问题。。明显花了

....流量条是什么
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

签到天数: 74 天

[LV.6]常住居民II

发表于 2013/1/7 00:40 来自手机 | 显示全部楼层
小樱 发表于 2013/1/6 23:37
....流量条是什么

你签名档里正挂着的东西
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

 成长值: 333

签到天数: 4736 天

[LV.Master]伴坛终老

发表于 2013/1/7 01:23 | 显示全部楼层
依听忆昔 发表于 2013/1/7 00:40
你签名档里正挂着的东西

没问题啊
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

大男子主义 该用户已被删除
发表于 2013/1/31 07:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

该如何面对 该用户已被删除
发表于 2013/4/1 10:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

意料中旳結果 该用户已被删除
发表于 2013/8/12 04:19 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

夏末诠释美 该用户已被删除
发表于 2013/8/14 01:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

慢性腐蚀心灵 该用户已被删除
发表于 2013/8/17 17:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

我不想太在意 该用户已被删除
发表于 2013/8/18 06:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024/12/22 02:26 , Processed in 0.158967 second(s), 26 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

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