1. function convertip($ip) {
  2. $ip1num = 0;
  3. $ip2num = 0;
  4. $ipAddr1 ="";
  5. $ipAddr2 ="";
  6. $dat_path = './QQWry.Dat';
  7. if(!preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) {
  8. return 'IP Address Error';
  9. }
  10. if(!$fd = @fopen($dat_path, 'rb')){
  11. return 'IP date file not exists or access denied';
  12. }
  13. $ip = explode('.', $ip);
  14. $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
  15. $DataBegin = fread($fd, 4);
  16. $DataEnd = fread($fd, 4);
  17. $ipbegin = implode('', unpack('L', $DataBegin));
  18. if($ipbegin < 0) $ipbegin += pow(2, 32);
  19. $ipend = implode('', unpack('L', $DataEnd));
  20. if($ipend < 0) $ipend += pow(2, 32);
  21. $ipAllNum = ($ipend - $ipbegin) / 7 + 1;
  22. $BeginNum = 0;
  23. $EndNum = $ipAllNum;
  24. while($ip1num>$ipNum || $ip2num<$ipNum) {
  25. $Middle= intval(($EndNum + $BeginNum) / 2);
  26. fseek($fd, $ipbegin + 7 * $Middle);
  27. $ipData1 = fread($fd, 4);
  28. if(strlen($ipData1) < 4) {
  29. fclose($fd);
  30. return 'System Error';
  31. }
  32. $ip1num = implode('', unpack('L', $ipData1));
  33. if($ip1num < 0) $ip1num += pow(2, 32);
  34.  
  35. if($ip1num > $ipNum) {
  36. $EndNum = $Middle;
  37. continue;
  38. }
  39. $DataSeek = fread($fd, 3);
  40. if(strlen($DataSeek) < 3) {
  41. fclose($fd);
  42. return 'System Error';
  43. }
  44. $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
  45. fseek($fd, $DataSeek);
  46. $ipData2 = fread($fd, 4);
  47. if(strlen($ipData2) < 4) {
  48. fclose($fd);
  49. return 'System Error';
  50. }
  51. $ip2num = implode('', unpack('L', $ipData2));
  52. if($ip2num < 0) $ip2num += pow(2, 32);
  53. if($ip2num < $ipNum) {
  54. if($Middle == $BeginNum) {
  55. fclose($fd);
  56. return 'Unknown';
  57. }
  58. $BeginNum = $Middle;
  59. }
  60. }
  61. $ipFlag = fread($fd, 1);
  62. if($ipFlag == chr(1)) {
  63. $ipSeek = fread($fd, 3);
  64. if(strlen($ipSeek) < 3) {
  65. fclose($fd);
  66. return 'System Error';
  67. }
  68. $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
  69. fseek($fd, $ipSeek);
  70. $ipFlag = fread($fd, 1);
  71. }
  72. if($ipFlag == chr(2)) {
  73. $AddrSeek = fread($fd, 3);
  74. if(strlen($AddrSeek) < 3) {
  75. fclose($fd);
  76. return 'System Error';
  77. }
  78. $ipFlag = fread($fd, 1);
  79. if($ipFlag == chr(2)) {
  80. $AddrSeek2 = fread($fd, 3);
  81. if(strlen($AddrSeek2) < 3) {
  82. fclose($fd);
  83. return 'System Error';
  84. }
  85. $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
  86. fseek($fd, $AddrSeek2);
  87. } else {
  88. fseek($fd, -1, SEEK_CUR);
  89. }
  90. while(($char = fread($fd, 1)) != chr(0))
  91. $ipAddr2 .= $char;
  92. $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
  93. fseek($fd, $AddrSeek);
  94. while(($char = fread($fd, 1)) != chr(0))
  95. $ipAddr1 .= $char;
  96. } else {
  97. fseek($fd, -1, SEEK_CUR);
  98. while(($char = fread($fd, 1)) != chr(0))
  99. $ipAddr1 .= $char;
  100. $ipFlag = fread($fd, 1);
  101. if($ipFlag == chr(2)) {
  102. $AddrSeek2 = fread($fd, 3);
  103. if(strlen($AddrSeek2) < 3) {
  104. fclose($fd);
  105. return 'System Error';
  106. }
  107. $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
  108. fseek($fd, $AddrSeek2);
  109. } else {
  110. fseek($fd, -1, SEEK_CUR);
  111. }
  112. while(($char = fread($fd, 1)) != chr(0)){
  113. $ipAddr2 .= $char;
  114. }
  115. }
  116. fclose($fd);
  117. if(preg_match('/http/i', $ipAddr2)) {
  118. $ipAddr2 = '';
  119. }
  120. $ipaddr = "$ipAddr1 $ipAddr2";
  121. $ipaddr = preg_replace('/CZ88.NET/is', '', $ipaddr);
  122. $ipaddr = preg_replace('/^s*/is', '', $ipaddr);
  123. $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
  124. if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {
  125. $ipaddr = 'Unknown';
  126. }
  127. return $ipaddr;
  128. }

只要调用此方法,传入一个正确的IP地址,就能得到纯真IP数据库中相对应的地理位置了

例如:
  1. convertip(202.96.209.5)

返回的值为:上海市 电信

 
注:写有此方法的文件需和纯真数据库文件(QQWry.Dat)放在同一级目录,否则就需要修改$dat_path的内容。

准备工作:

建议本地IP地址数据库,请到http://www.cz88.net/这个网站下载一个纯真IP数据库,安装完成后,到安装目录里把QQWry.dat文件取出来,这个就是我们想要的IP数据库了,放到你想要目录下。

PHP调用纯真IP数据库返回具体地址的更多相关文章

  1. PHP利用纯真IP数据库在本地实现IP地址信息查询

    https://blog.csdn.net/myweishanli/article/details/45098693 准备工作: 建议本地IP地址数据库,请到http://www.cz88.net/这 ...

  2. 优化读取纯真IP数据库QQWry.dat获取地区信息

    改自HeDaode 2007-12-28的代码 将之改为从硬盘读取后文件后,将MemoryStream放到内存中,提高后续查询速度 ///<summary> /// 提供从纯真IP数据库搜 ...

  3. python3通过纯真IP数据库查询IP归属地信息

    在网上看到的别人写的python2的代码,修改成了python3. 把纯真IP数据库文件qqwry.dat放到czip.py同一目录下. #! /usr/bin/env python # -*- co ...

  4. 纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)

    纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat) 转载自:http://blog.cafeboy.org/2011/02/25/qqwry-to-ipwry/ ht ...

  5. 纯真IP数据库导入mysql

    下载纯真IP数据库 安装后解压到本地为ip.txt 格式为: 1.1.145.0       1.1.147.255     泰国 沙功那空 1.1.148.0       1.1.149.255   ...

  6. 【VB.NET】利用纯真IP数据库查询IP地址及信息

    几年前从某个博客抄来的,已经忘记原地址了,如果需要C#版的,可以在博客园搜到吧.我因为自己用,所以转换为了VBNET代码,而且也放置了很久,今天无意间翻出来,就分享给大家吧. 首先,先下载 纯真数据库 ...

  7. 用纯真ip数据库.dat文件查询ip归属

    网址:http://www.cz88.net/ 下载安装后,有这个文件: 安装路径/ip/qqwry.dat 创建实例的时候吧这个文件路径传入,即可调用. /** * 从纯真IP地址库查询ip归属 * ...

  8. PHP获取IP及地区信息(纯真IP数据库)

    昨天在写程序的时候,发现在用户的时候记录IP和地区信息也许以后用得上,去网上找了找,发现实现的方式有好多好多,因为我用的ThinkPHP,后来又去TP官网找了找,最后采用了下面这种方法. <?p ...

  9. 易语言 - 模块 - 子程序 - 纯真IP数据库查询

    .版本 .支持库 spec .程序集 程序集1 .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码 _临时子程序 () ' 在初始化代码执行完毕后调用测试代码 返回 () ' ...

随机推荐

  1. PHP配置环境中如何开启伪静态

    1.在httpd.conf中引入httpd-vhosts.conf 2.在httpd.conf中开启mod_rewrite.so 3.在httpd-vhosts.conf中配置虚拟主机 AllowOv ...

  2. 全球城市群Megalopolis

    Megalopolis From Wikipedia, the free encyclopedia   (Redirected from Megalopolis (city type))   &quo ...

  3. etree不存在解决方法

    from lxml import html text=xxx//测试的html文本 etree = html.etree htmlDiv = etree.HTML(text) title = html ...

  4. UWP获取任意网页加载完成后的HTML

    主要思想:通过后台WebView载入指定网页,再提取出WebView中的内容 关键代码: var html = await webView.InvokeScriptAsync("eval&q ...

  5. Leetcode674.Longest Continuous Increasing Subsequence最长连续递增序列

    给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3. 尽管 [1,3,5,7] 也 ...

  6. uml设计之多重性

    ---------------------------------------------------------------------------------------------------- ...

  7. 如何使用Data Lake Analytics创建分区表

    前言 Data Lake Analytics(后文简称DLA)提供了无服务化的大数据分析服务,帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在关系型数据库 ...

  8. JS黑科技

    1.论如何优雅的取随机字符串 Math.random().toString(16).substring(2) // 13位 Math.random().toString(36).substring(2 ...

  9. yum install mysql-devel

    linux系统在装mysql相关的包时要先装mysql-deval,这个包包含mysql的相关配置和环境组件 执行yum install mysql-deval

  10. 阿里云DDoS高防的演进:防御效果成核心

    分布式拒绝服务(DDoS)攻击这一网络公敌,是任何互联网业务的重大威胁.随着DDoS攻击工具化的发展,无论是简单野蛮的流量型攻击,还是复杂精巧的应用型攻击,黑客发起DDoS攻击变得越来越简单和自动化. ...