• 188阅读
  • 20回复

为你守候 温馨家园 即日起开始拥有自己的IP归属信息表 [复制链接] [手机版]

上一主题 下一主题
离线zhangjingyu

只看楼主 倒序阅读 使用道具 绿 楼主  发表于: 2026-04-21 22:18:59 星期二
现在在帖子阅读页看到的ip归属信息(来自:)是通过某个函数从本地数据库文件ipdata.dat读取出来然后写进帖子数据表,最后在屏幕上呈现。然而,这个数据并不是太准确,这么多年了,一直耿耿于怀,一直想让这个数据更准确些。最简单有效的方法就是获取上面最新版的数据库文件,可网络上并不好找,官方已经不提供这种格式的文件了。

怎么办呢?有没有其它的方法?网络上有很多查询ip归属的网站,如果能把查询结果提取出来,写进帖子信息数据表里不就准确多了吗?于是,从去年12月6日开始了尝试:
之前是没有能力解决这个问题,唯一能想到的办法就是更新ipdata.dat文件,然而不好找。现在想到的办法则是抛弃这种传统的获取方式,改为通过论坛获取到的ip地址把对应的地理位置保存起来,然后发帖的时候直接把这个地址写进数据表。

经过不断的努力,终于能够获取到ip归属信息并能写进数据表,又进一步在后台添加了开关,可以选择使用网络获取还是本地。然而,后来mb_convert_encoding()这个把utf-8编码转换为gbk的关键函数不知道为什么不能用了。问deepseek,也是用这个函数转换,可问题是这个函数无效啊。

函数转换的方法一直没有最后的结果,只能另辟蹊径了。想到以前用一种特殊的字符组合表示中文汉字,就是“&#26597”这种形式的,到底叫什么,我也不了解。然后就想如何把中文转换成这样式儿的。经过不懈的努力,终于在本月14日找到了这个转码关键函数utf8ToNumericEntities()。虽然模样有点儿怪,但通用性应该很好,浏览器都支持。

这样,ip归属以一种特殊的符号形式写进帖子数据表中。只是,这种网络获取的方式,每个回帖都要访问外网,速度可能受到影响,更主要是担心外网可能拒绝来自本站的访问。既然前面已经成功了,我们可以把ip地址和归属的对应关系存储在一个数据表中,发帖时先本地查询,如果有则直接读取;没有记录的话,再访问外网并记录,下次同样的ip还是本地查询。这样,速度更快,也能让数据更准确。

经过最近几天的努力,构建数据表,修改添加自增字段id,成功写进多条测试数据,数据表完成!然后就是写查询数据表的语句,有符合条件的ip地址,直接从表中读取归属地;没有的话,访问外网获取并存储数据。

到此,全部设想实现。
Google了一下,这东西专业名称叫numeric character reference(NCR),直译就是数字字符引用。一个Numeric Character Reference编码是由一个与号(&)跟着一个井号(#),然后跟着这个字符的Unicode编码值,最后跟着一个分号组成的,就像上面的例子一样。
有了数字字符引用,就可以在网页中显示Unicode字符了,不用考虑html文件本身的编码,因为数字字符引用只用到ASCII字符集里的字符。所以,即使在gb2312编码的网页中,也可以用NCR显示埃及的象形文字了。

前两种是 numeric character reference(NCR),数字取值为目标字符的 Unicode code point;以「&#」开头的后接十进制数字,以「&#x」开头的后接十六进制数字。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 沙发  发表于: 2026-04-21 22:44:59 星期二  点亮(0)
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 板凳  发表于: 2026-04-21 22:50:52 星期二  点亮(0)

今晚的本地测试截图。判断查询结果非空,则输出数据表查询结果,否则访问外网获取数据。
  1.     $newip = preg_replace('/\.\d+$/', '', $onlineip);//去掉ip地址最后面的点和数字
  2.     $kw=$newip.'%';//构造查询数据表关键字,百分号为通配符
  3.     $rs=$db->get_one("SELECT * FROM pw_ipdatabase where onlineip like '$kw' order by id desc limit 1");//倒序查询最新的一个
  4.     $guishu=$rs['ipfrom'];
  5.         if($rs && !empty($guishu)){
  6.         return $guishu;
  7.         }else{
由于第3条和第4条记录没有ip归属信息,也就是为空,所以同样的ip再次回帖时继续访问外网,终于在第5条写进归属信息。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 地板  发表于: 2026-04-21 23:25:42 星期二  点亮(0)
#
# phpwind bakfile
# version:8.7
# time: 2026-04-21 23:05
# tablepre: pw_
#
# --------------------------------------------------------


DROP TABLE IF EXISTS `pw_ipdatabase`;
CREATE TABLE `pw_ipdatabase` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `uid` int(10) unsigned NOT NULL DEFAULT '0',
  `name` varchar(30) NOT NULL DEFAULT '',
  `tid` int(10) unsigned NOT NULL DEFAULT '0',
  `timestamp` int(10) unsigned NOT NULL DEFAULT '0',
  `date` varchar(30) NOT NULL DEFAULT '',
  `onlineip` varchar(30) NOT NULL DEFAULT '',
  `ipfrom` mediumtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
好奇怪,备份数据然后下载了好几次,pw_ipdatabase表为什么没有数据呢? 查看common.php,经过对比,修改没有问题啊,那是什么原因呢?

再仔细查看ftp,哎,文件竟然没有上传覆盖!
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 4楼 发表于: 2026-04-21 23:30:12 星期二  点亮(0)
好吧,我来宣布:温馨家园第一条ip归属信息正式写进pw_ipdatabase表!这是属于我们自己的简单库(稍后会备份、下载文件查看证实)。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 5楼 发表于: 2026-04-21 23:36:06 星期二  点亮(0)
之前下载备份文件夹只有2个文件,这回是3个,所以确实是有备份数据了。解压文件:
#
# phpwind bakfile
# version:8.7
# time: 2026-04-21 23:31
# tablepre: pw_
#
# --------------------------------------------------------
INSERT INTO `pw_ipdatabase`  VALUES('1','2','zhangjingyu','5419','1776785411','2026-04-21 23:30:11','112.37.131.148','中国山东聊城莘县移动</span');
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 6楼 发表于: 2026-04-21 23:41:29 星期二  点亮(0)
“中国山东聊城莘县移动”在数据表中是“&#+5位数字”形式的,楼上直接粘贴的,所以浏览器以中文显示了。但后面还有个“</span”,为什么在帖子“来自:”后面没显示出来呢?可能在处理字符串的代码中没有替换干净。不管怎么说,终于正常了。有时间了再处理细节问题。太晚了,明天还得5点起来,吃饭,去上班。宝宝心里苦啊。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 7楼 发表于: 2026-04-21 23:51:33 星期二  点亮(0)
查看本地数据库管理,表里最后确实有“</span”,看来确实是字符串处理的问题。再说。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线BI4IVE

只看该作者 8楼 发表于: 2026-04-22 11:24:04 星期三  点亮(0)
我刚才看了一下确实价格很贵
一般三个位置
图1 纯真的IP库

图2 埃文的库

图三 三方查询

原本寻思价格便宜给买个离线数据库了 谁知道这么贵,只有 纯真24年的免费。。。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!
离线zhangjingyu

只看该作者 9楼 发表于: 2026-04-23 05:24:36 星期四  点亮(0)
没考虑过购买离线数据库,因为这个不是刚需、必须,况且准确性也真的不是很高,只能是有一个大致的参考。当初的附件上传依赖flash,自其退出历史舞台,附件上传不能用了,只能靠手机版(手机版只能在主帖传图)。后来看到有新的修改方法,果断出手,最后花了小钱把这大事办了。
站长管理员版主请进,付费求新的附件上传修改方法
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

我们应该知道:岁月如梭!其实生命,是很短暂,也是很脆弱的东西…… 设置自己的帖子签名请点这里!