亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php查詢ip所在地代碼

2024-09-04 11:44:04
字體:
來源:轉載
供稿:網友
  1. <?php 
  2. /** 
  3. *@ date         2010.12.21 
  4. *@ author       王剛 
  5. *@ email        373882774@qq.com 
  6. *@ qq           373882774 
  7. 注:文件頭 [第一條索引的偏移量 (4byte)] + [最后一條索引的偏移地址 (4byte)]     8字節 
  8. 記錄區 [結束ip (4byte)] + [地區1] + [地區2]                                4字節+不定長 
  9. 索引區 [開始ip (4byte)] + [指向記錄區的偏移地址 (3byte)]                   7字節 
  10. */ 
  11. class iplocation{ 
  12. var $fp
  13. var $firstip;  //第一條ip索引的偏移地址 
  14. var $lastip;   //最后一條ip索引的偏移地址 
  15. var $totalip;  //總ip數 
  16. /* 
  17. |---------------------------------------------------------------------------- 
  18. | 構造函數,初始化一些變量 
  19. |---------------------------------------------------------------------------- 
  20. | 
  21. */ 
  22. function iplocation($datfile = "qqwry.dat"){ 
  23. $this->fp=fopen($datfile,'rb')or die("qqwry.dat不存在,請去網上 <a href='http://www.heqee.com/apps教程/download/iplocationapi.rar'>下載純真ip數據 庫</a>, 'qqwry.dat' 放到當前目錄下");   //二制方式打開 
  24. $this->firstip = $this->get4b(); //第一條ip索引的絕對偏移地址 
  25. $this->lastip = $this->get4b();  //最后一條ip索引的絕對偏移地址 
  26. $this->totalip =($this->lastip - $this->firstip)/7 ; //ip總數 索引區是定長的7個字節,在此要除以7, 
  27. register_shutdown_function(array($this,"closefp"));  //為了兼容php5以下版本,本類沒有用析構函數,自動關閉ip庫. 
  28. /* 
  29. |---------------------------------------------------------------------------- 
  30. | 關閉ip庫 
  31. |---------------------------------------------------------------------------- 
  32. | 
  33. */ 
  34. function closefp(){ 
  35. fclose($this->fp); 
  36. /* 
  37. |---------------------------------------------------------------------------- 
  38. | 讀取4個字節并將解壓成long的長模式 
  39. |---------------------------------------------------------------------------- 
  40. | 
  41. */ 
  42. function get4b(){ 
  43. $str=unpack("v",fread($this->fp,4)); 
  44. return $str[1]; 
  45. /* 
  46. |---------------------------------------------------------------------------- 
  47. | 讀取重定向了的偏移地址 
  48. |---------------------------------------------------------------------------- 
  49. | 
  50. */ 
  51. function getoffset(){ 
  52. $str=unpack("v",fread($this->fp,3).chr(0)); 
  53. return $str[1]; 
  54. /* 
  55. |---------------------------------------------------------------------------- 
  56. | 讀取ip的詳細地址信息 
  57. |---------------------------------------------------------------------------- 
  58. | 
  59. */ 
  60. function getstr(){ 
  61. $split=fread($this->fp,1); 
  62. while (ord($split)!=0) { 
  63. $str .=$split
  64. $split=fread($this->fp,1); 
  65. return $str
  66. /* 
  67. |---------------------------------------------------------------------------- 
  68. | 將ip通過ip2long轉成ipv4的互聯網地址,再將他壓縮成big-endian字節序 ,用來和索引區內的ip地址做比較 
  69. |---------------------------------------------------------------------------- 
  70. | 
  71. */ 
  72. function iptoint($ip){ 
  73. return pack("n",intval(ip2long($ip))); 
  74. /* 
  75. |---------------------------------------------------------------------------- 
  76. | 獲取地址信息 
  77. |---------------------------------------------------------------------------- 
  78. | 
  79. */ 
  80. function readaddress(){ 
  81. $now_offset=ftell($this->fp); //得到當前的指針位址 
  82. $flag=$this->getflag(); 
  83. switch (ord($flag)){ 
  84. case 0: 
  85. $address=""
  86. break
  87. case 1: 
  88. case 2: 
  89. fseek($this->fp,$this->getoffset()); 
  90. $address=$this->getstr(); 
  91. break
  92. default
  93. fseek($this->fp,$now_offset); 
  94. $address=$this->getstr(); 
  95. break
  96. return $address
  97. /* 
  98. |---------------------------------------------------------------------------- 
  99. | 獲取標志1或2   用來確定地址是否重定向了 
  100. |---------------------------------------------------------------------------- 
  101. | 
  102. */ 
  103. function getflag(){ 
  104. return fread($this->fp,1); 
  105. /* 
  106. |---------------------------------------------------------------------------- 
  107. | 用二分查找法在索引區內搜索ip 
  108. |---------------------------------------------------------------------------- 
  109. | 
  110. */ 
  111. function searchip($ip){ 
  112. $ip=gethostbyname($ip);     //將域名轉成ip 
  113. $ip_offset["ip"]=$ip
  114. $ip=$this->iptoint($ip);    //將ip轉換成長整型 
  115. $firstip=0;                 //搜索的上邊界 
  116. $lastip=$this->totalip;     //搜索的下邊界 
  117. $ipoffset=$this->lastip;    //初始化為最后一條ip地址的偏移地址 
  118. while ($firstip <= $lastip){ 
  119. $i=floor(($firstip + $lastip) / 2);          //計算近似中間記錄 floor函數記算給定浮點數小的最大整數,說白了就是四舍五也舍 
  120. fseek($this->fp,$this->firstip + $i * 7);    //定位指針到中間記錄 
  121. $startip=strrev(fread($this->fp,4));         //讀取當前索引區內的開始ip地址,并將其little-endian的字節序轉換成big-endian的字節序 
  122. if ($ip < $startip) { 
  123. $lastip=$i - 1; 
  124. else { 
  125. fseek($this->fp,$this->getoffset()); 
  126. $endip=strrev(fread($this->fp,4)); 
  127. if ($ip > $endip){ 
  128. $firstip=$i + 1; 
  129. else { 
  130. $ip_offset["offset"]=$this->firstip + $i * 7; 
  131. break
  132. return $ip_offset
  133. /* 
  134. |---------------------------------------------------------------------------- 
  135. | 獲取ip地址詳細信息 
  136. |---------------------------------------------------------------------------- 
  137. | 
  138. */ 
  139. function getaddress($ip){ 
  140. $ip_offset=$this->searchip($ip);  //獲取ip 在索引區內的絕對編移地址 
  141. $ipoffset=$ip_offset["offset"]; 
  142. $address["ip"]=$ip_offset["ip"]; 
  143. fseek($this->fp,$ipoffset);      //定位到索引區 
  144. $address["startip"]=long2ip($this->get4b()); //索引區內的開始ip 地址 
  145. $address_offset=$this->getoffset();            //獲取索引區內ip在ip記錄區內的偏移地址 
  146. fseek($this->fp,$address_offset);            //定位到記錄區內 
  147. $address["endip"]=long2ip($this->get4b());   //記錄區內的結束ip 地址 
  148. $flag=$this->getflag();                      //讀取標志字節 
  149. switch (ord($flag)) { 
  150. case 1:  //地區1地區2都重定向 
  151. $address_offset=$this->getoffset();   //讀取重定向地址 
  152. fseek($this->fp,$address_offset);     //定位指針到重定向的地址 
  153. $flag=$this->getflag();               //讀取標志字節 
  154. switch (ord($flag)) { 
  155. case 2:  //地區1又一次重定向, 
  156. fseek($this->fp,$this->getoffset()); 
  157. $address["area1"]=$this->getstr(); 
  158. fseek($this->fp,$address_offset+4);      //跳4個字節 
  159. $address["area2"]=$this->readaddress();  //地區2有可能重定向,有可能沒有 
  160. break
  161. default//地區1,地區2都沒有重定向 
  162. fseek($this->fp,$address_offset);        //定位指針到重定向的地址 
  163. $address["area1"]=$this->getstr(); 
  164. $address["area2"]=$this->readaddress(); 
  165. break
  166. break
  167. case 2: //地區1重定向 地區2沒有重定向 
  168. $address1_offset=$this->getoffset();   //讀取重定向地址 
  169. fseek($this->fp,$address1_offset);   
  170. $address["area1"]=$this->getstr(); 
  171. fseek($this->fp,$address_offset+8); 
  172. $address["area2"]=$this->readaddress(); 
  173. break
  174. default//地區1地區2都沒有重定向 
  175. fseek($this->fp,$address_offset+4); 
  176. $address["area1"]=$this->getstr(); 
  177. $address["area2"]=$this->readaddress(); 
  178. break
  179. //*過濾一些無用數據 
  180. if (strpos($address["area1"],"cz88.net")!=false){ 
  181. $address["area1"]="未知"
  182. if (strpos($address["area2"],"cz88.net")!=false){ 
  183. $address["area2"]=" "
  184. return $address
  185.  
  186. /*用法如下:*/ 
  187. $ip=new iplocation("qqwry.dat"); 
  188. $address=$ip->getaddress("221.231.102.100"); 
  189. //$address=$ip->getaddress(www.111cn.net); 
  190. echo '<pre>'
  191. print_r($address); 
  192. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品嫩草视频| 国产精品久久久久不卡| 国产伊人精品在线| 日韩成人黄色av| 欧美一区二区三区四区在线| 日韩一区二区三区xxxx| 欧美激情手机在线视频| 亚洲第一福利在线观看| 啊v视频在线一区二区三区| 亚洲成人网av| 国产精品一区二区3区| 成人免费在线网址| 久久国产色av| 亚洲91av视频| 欧美高清在线观看| 日韩av综合网| 亚洲欧洲免费视频| 成人性生交大片免费观看嘿嘿视频| 精品一区电影国产| 日韩av在线导航| 在线观看日韩www视频免费| 亚洲iv一区二区三区| 久久久久久国产精品久久| 久久精品青青大伊人av| 久久中文字幕在线| 国产精品日韩精品| 亚洲成人国产精品| 国产欧美精品久久久| 51精品国产黑色丝袜高跟鞋| 青青草99啪国产免费| 国产精品久久久久久久av电影| 综合国产在线观看| 欧美日韩亚洲精品一区二区三区| 国模私拍视频一区| 国产欧美va欧美va香蕉在| 欧美电影在线观看高清| 色综合视频一区中文字幕| 久久人人爽人人| 国产欧美在线播放| 欧美日韩免费观看中文| 性金发美女69hd大尺寸| 亚洲欧美另类自拍| www.亚洲天堂| 深夜成人在线观看| 91精品国产亚洲| 国产精品美女主播| 国产精品日韩电影| 亚洲成人aaa| 亚洲人成欧美中文字幕| 成人久久18免费网站图片| 国产剧情日韩欧美| 91精品久久久久久久久不口人| 久久69精品久久久久久国产越南| 亚洲精品日韩欧美| 国产精品永久免费视频| 日韩成人在线播放| 播播国产欧美激情| 亚洲午夜久久久久久久| 精品国产欧美一区二区五十路| 欧美国产日本高清在线| 精品日本美女福利在线观看| 91av在线播放视频| 美女少妇精品视频| 欧美人与性动交a欧美精品| 日本国产精品视频| 亚洲天堂av电影| xxx成人少妇69| 亚洲天堂av在线播放| 久久香蕉精品香蕉| 国产欧美日韩精品在线观看| 国产久一一精品| 欧美激情va永久在线播放| 国产精品pans私拍| 欧美日韩精品国产| 亚洲色图狂野欧美| 日韩欧美aⅴ综合网站发布| 国产一区二区欧美日韩| 亚洲精品永久免费精品| 久久久综合av| 超碰精品一区二区三区乱码| 亚洲欧美日韩区| 亚洲摸下面视频| 91在线视频免费| 国产福利视频一区二区| 日韩小视频在线观看| 91在线免费观看网站| 亚洲精品99久久久久中文字幕| 岛国av午夜精品| 亚洲精品国产精品久久清纯直播| 亚洲精品美女在线观看播放| 2021久久精品国产99国产精品| 日韩久久精品成人| 91av视频导航| 91精品在线播放| 一区二区三欧美| 欧美精品videosex性欧美| 91在线播放国产| 久久国产精品免费视频| 欧美日韩成人网| 国产精品高潮粉嫩av| 日本在线观看天堂男亚洲| 亚洲色图av在线| 日韩欧美aaa| 91精品国产自产在线| 亚洲999一在线观看www| 欧美风情在线观看| 668精品在线视频| 欧美电影在线观看完整版| 在线看片第一页欧美| 欧美日韩福利视频| 性亚洲最疯狂xxxx高清| 中文字幕久精品免费视频| 亚洲精品短视频| 福利一区视频在线观看| 日韩中文av在线| 国产一区二区三区日韩欧美| 97免费在线视频| 精品久久久91| 国产男女猛烈无遮挡91| 国产精品jizz在线观看麻豆| 中文字幕亚洲综合| 国产有码在线一区二区视频| 国产成人综合精品在线| 成人a在线视频| 亚洲第一区第二区| 清纯唯美亚洲综合| 国产成人精品一区| 大荫蒂欧美视频另类xxxx| 欧美怡红院视频一区二区三区| 国产精品久久久久久av福利| 日韩av在线高清| 中文字幕欧美日韩| 日韩国产高清污视频在线观看| 日本成人精品在线| 欧美另类极品videosbestfree| 亚洲欧美另类自拍| 成人信息集中地欧美| 亚洲精品久久久久久久久久久久| 最新亚洲国产精品| 欧美日韩综合视频| 欧美日韩国产精品一区二区三区四区| 97在线免费观看视频| 国产精品第七影院| 久久久精品视频在线观看| 亚洲区bt下载| 国产成人久久久精品一区| 久久精品99久久久香蕉| 国产精品日日做人人爱| 97热在线精品视频在线观看| 国产精品狼人色视频一区| 岛国av午夜精品| 欧美日韩中文字幕在线视频| 国产成人97精品免费看片| 欧美大片欧美激情性色a∨久久| 92福利视频午夜1000合集在线观看| 成人免费看黄网站| 国产午夜精品免费一区二区三区| 亚洲欧美日韩中文视频| 成人国产精品久久久久久亚洲| 亚洲第一精品夜夜躁人人爽| 亚洲成人av在线播放| 久久精品国产欧美亚洲人人爽| 日韩欧美aⅴ综合网站发布| 国产精品第1页|