• 4676阅读
  • 144回复

关于帖子阅读页显示的ip地址来源 [复制链接] [手机版]

上一主题 下一主题
离线zhangjingyu

只看该作者 99楼 发表于: 2025-12-12 09:21:17 星期五  点亮(0)
一、通过服务器配置获取IP地址 展开讲讲
使用$_SERVER超全局变量 2
$_SERVER['SERVER_ADDR']:直接获取服务器的IP地址,适用于大多数情况3。
$_SERVER['REMOTE_ADDR']:获取客户端(浏览器)的IP地址,需注意代理服务器可能返回伪造IP6。
使用gethostbyname函数 2
通过gethostname()获取主机名,再使用gethostbyname解析为IP地址
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 100楼 发表于: 2025-12-12 09:30:16 星期五  点亮(0)
文件里调用的$onlineip是在全局文件里定义的,可能在不同的地方虽然还是$onlineip,可理解的结果却不是原来的样子,就像两个重名的人。怎么说呢,我也说不清楚,也不了解php。起床后看看global.php文件里是怎么定义$onlineip的吧,或者我们可以试着重新定义下。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 101楼 发表于: 2025-12-12 11:51:47 星期五  点亮(0)
$onlineip = pwGetIp();
查找这个函数:require/common.php
function pwGetIp() {
    global $pwServer, $db_xforwardip;
    if ($db_xforwardip) {
        if ($pwServer['HTTP_X_FORWARDED_FOR'] && $pwServer['REMOTE_ADDR']) {
            if (strstr($pwServer['HTTP_X_FORWARDED_FOR'], ',')) {
                $x = explode(',', $pwServer['HTTP_X_FORWARDED_FOR']);
                $pwServer['HTTP_X_FORWARDED_FOR'] = trim(end($x));
            }
            if (preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['HTTP_X_FORWARDED_FOR'])) {return $pwServer['HTTP_X_FORWARDED_FOR'];}
        } elseif ($pwServer['HTTP_CLIENT_IP'] && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['HTTP_CLIENT_IP'])) {return $pwServer['HTTP_CLIENT_IP'];}
    }
    $db_xforwardip = 0;
    if (preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $pwServer['REMOTE_ADDR'])) {return $pwServer['REMOTE_ADDR'];}
    return 'Unknown';
}
这里面应该主要是正则匹配,这个看不懂。要不我们也用第一行代码试试?
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 102楼 发表于: 2025-12-12 14:47:55 星期五  点亮(0)
回复99楼 zhangjingyu 的帖子
zhangjingyu 一、通过服务器配置获取IP地址 展开讲讲
使用$_SERVER超全局变量 2
$_SERVER['SERVER_ADDR']:直接获取服务器的IP地址,适用于大多数情况3。
$_SERVER['REMOTE_ADDR']:获取客户端(浏览器)的IP地址,需注意代理服务器可能返回伪造IP6。
使用gethostbyname函数 2 .. (2025-12-12 09:21)
$hostname = gethostname();
$ip = gethostbyname($hostname);
它得到的ip地址是127.0.0.1,这也不是我们想要的啊。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 103楼 发表于: 2025-12-12 15:29:30 星期五  点亮(0)
function getip() {
    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP") , "unknown")) {
        $ip = getenv("HTTP_CLIENT_IP");
    } else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR") , "unknown")) {
        $ip = getenv("HTTP_X_FORWARDED_FOR");
    } else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR") , "unknown")) {
        $ip = getenv("REMOTE_ADDR");
    } else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
        $ip = $_SERVER['REMOTE_ADDR'];
    } else {
        $ip = "unknown";
    }
    return $ip;
}
这个也是获取ip地址的方法,测试应该可用。但无论如何,在页头调用后就“变味”了,也不知道到底因为什么。算了吧,换个方式,把ip归属写进缓存文件,然后再从缓存文件里面读取。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 104楼 发表于: 2025-12-12 15:46:16 星期五  点亮(0)
算了吧,不研究这个了,虽然写进缓存文件应该不难,但想读取出来似乎就不简单了。它不像数据表,可以通过uid直接查询。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 105楼 发表于: 2025-12-13 15:42:40 星期六  点亮(0)
代码放在页头文件获取的结果不准确,想放在页脚模板文件,结果不显示。想查找对应的php文件,结果没找着,再想办法吧。既然是准备更新帖子的ip地址来源,那就直接在发帖文件中测试吧。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 106楼 发表于: 2025-12-14 12:16:52 星期日  点亮(0)
昨天本地测试修改lib/forum/topicpost.class.php,也就是69楼提到的一个文件,看文件名和其相关数据表pw_tmsgs,自然应该是和发帖有关。然而,修改文件报错。

早上醒来后,床上躺着想了好长时间,一直在想这个问题。几天了,经过努力取得了不小的进步,然而,最终的目标一直没能实现。到底能不能做到呢?还要再换努力的方向吗?研究那个从根源上获取ip地址来源的函数?

继续修改文件,重新寻找放调用代码(如下)的位置。好在,没有报错,那是不是意味着又取得了进步?
$url=$db_bbsurl.'/5337music/2.php';
$guishu=file_get_contents($url);
输出:“IP:Unknown”,不能显示来源。于是测试$url输出,“来自:/5337music/2.php”。看来,论坛的网址没能获取,那就调用下。

global $db_bbsurl;
$url=$db_bbsurl.'/5337music/2.php';
$guishu=file_get_contents($url);
“来自:http://localhost/5337music/2.php”。再改为$guishu,看看能不能把ip归属写进数据表。结果显示“ 来自:中国安徽省合肥市 庐阳区”!

看来我们似乎快成功了,或者说已经成功了。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 107楼 发表于: 2025-12-14 12:46:31 星期日  点亮(0)
$pwSQL = S::sqlSingle(array(
'tid' => $this->tid,
'aid' => $this->data['aid'],
'userip' => $onlineip,
'ifsign' => $this->data['ifsign'],
'buy' => '',
'ipfrom' => $ipTable->getIpFrom($onlineip),
'tags' => $this->data['tags'],
'ifconvert' => $this->data['convert'],
'ifwordsfb' => $this->data['ifwordsfb'],
'content' => $this->data['content'],
'magic' => $this->data['magic']
        ));
        $this->db->update("INSERT INTO $pw_tmsgs SET $pwSQL");
写进数据表的数据,单独把“'ipfrom' => $ipTable->getIpFrom($onlineip),”提取出来放到前面去,应该可以吧。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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

只看该作者 108楼 发表于: 2025-12-14 13:09:03 星期日  点亮(0)
不行,放到外面不行。那就还是在里面,通过一个开关判断,是用原来的“'ipfrom' => $ipTable->getIpFrom($onlineip)”还是我们另外研究的“$guishu”。
尊重每位祺师,做有价值的祺文化社区!欢迎光临,并感谢您的支持与陪伴!
我希望能通过这个论坛让更多的朋友更多的关爱自己的家人和朋友,不要等到有一天失去后才知道没有好好的珍惜,才知道
拥有的珍贵!亲爱的们,如果你懂得,请把这份关爱传递,让更多的人加入到爱心接力当中,让每个人的心中都洋溢着爱的温馨!

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