Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[已解决] ====应急解决====2.0非常严重的BUG~会员疯狂洗积分,这里两种解决方法!

[复制链接]
liuzhly 发表于 2010-1-22 21:20:22 | 显示全部楼层 |阅读模式
本帖最后由 liuzhly 于 2010-01-25 17:57 编辑

方案一、发现很多人都有这种原因,而官方没有这原因,初步估计跟服务器时区有关!!!!



一般php无论是在windows下还是linux下安装,其默认安装配置的时区都是与中国相差8小时,我们可以通过下面2方法解决它

1,在php.ini中修改当地时区获取中国时间,可在php.ini中查找date.timezone并修改.
windows下php.ini一般在:C:/WINDOWS/php.ini
linux下php.ini一般在: /etc/php.ini

date.timezone = "Asia/Chongqing"



如果服务器无法修改时区,无法编辑PHP配置文件,设置方法,

打开 common.php,在其顶部加上:

date_default_timezone_set(PRC); 设置一下时区为中国!

这样基本可以解决问题!大家测试一下,如果不行,使用方案二!


方案二、出现那种现象,我查看了源代码,应该是 dateline 的时间问题

function_common.php里:


                                                if($rule['cycletype'] == 1) {
                                                        $today = sstrtotime(gmdate('Y-m-d', $_SGLOBAL['timestamp']+$_SCONFIG['timeoffset']*3600));
                                                        //判断是否为昨天
                                                        if($creditlog['dateline'] < $today && $rule['rewardnum']) {
                                                                $creditlog['cyclenum'] =  0;
                                                                $sql = 1;
                                                                $newcycle = true;
                                                        }
                                                }


$today  使用转换函数,转换是今天,只要设置是东8区,系统返回中华人民共和国时间,但是 $creditlog['dateline'] 的时间是 $_SGLOBAL['timestamp'] ,如果你的PHP配置设置时区是中国,估计不存在什么问题,但是如果PHP配置默认,那么应该就是 $_SGLOBAL['timestamp']  与当前时间相差 8 小时 ..如果是这样,那么 if($creditlog['dateline'] < $today 只有在早晨 8点钟以后才成立,0-8点之间,更新一条记录,程序判断属于昨天,当然可以无限制刷分了~~

解决方法:
1、首先我没遇到这问题,我只是依照你们思路感觉应该是时区的问题,所以大家可以测试一下:
使用第一种方法,更改PHP时区,在 COMMON.php里添加 date_default_timezone_set(PRC); 设置正确时区,希望大家测试一下,如果问题解决了,吱一声,告知其他朋友修改,如果没解决,也吱一声~~~
2、方法2,修改代码:function_common.php里:修改成红色的代码:
因为

$today 是还原到目前时区的凌晨时间,就是:今天 00:00:00 ,$today1 就把检测的时间还原到 某天 00:00:00 ,检测一下是否一样,一样表示同一天,小宇表示昨天或者前天,这样也能解决问题,大家可以试试,还是:

解决问题请吱声,没解决也吱声!


if($rule['cycletype'] == 1) {
                                                        $today = sstrtotime(gmdate('Y-m-d', $_SGLOBAL['timestamp']+$_SCONFIG['timeoffset']*3600));
$today1 = sstrtotime(gmdate('Y-m-d', $creditlog['dateline']+$_SCONFIG['timeoffset']*3600));

                                                        //判断是否为昨天
                                                        if( $today1 < $today && $rule['rewardnum']) {
                                                                $creditlog['cyclenum'] =  0;
                                                                $sql = 1;
                                                                $newcycle = true;
                                                        }
                                                }

评分

1

查看全部评分

 楼主| liuzhly 发表于 2010-1-22 21:22:38 | 显示全部楼层
汗了,编辑的帖子需要审核~~
回复

使用道具 举报

 楼主| liuzhly 发表于 2010-1-22 21:25:32 | 显示全部楼层
从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的

也就是显示的时间(无论用什么php命令)都是格林威治标准时间

和我们的时间差了正好8个小时,有以下3中方法可以恢复正常的时间

1,最简单的方法就是不要用php5.1以上的版本

2,如果一定要用,而且不能修改php.ini,则需要在关于时间的初始化的语句的
上面加上 date_default_timezone_set (XXX);
cp无此问题

3,一劳永逸,仅限能修改php.ini。打开php.ini查找date.timezone 去掉前面的分号
= 后面加XXX,重启http服务(如apache2或iis等)即可


关于XXX,内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为庆,上,乌木齐)
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为门,香北)
还有新加坡:Asia/Singapore
其他可用的值是:Etc/GMT-8 ,Singapore ,Hongkong ,PRC
PRC是什么?PRC是c h i n a 啊-_-
回复

使用道具 举报

 楼主| liuzhly 发表于 2010-1-23 19:57:12 | 显示全部楼层
方案一补丁:



方案二补丁:

  //2.0原来的function_common

  //20100106补丁包的function_common

懒人补丁,覆盖即可!说明:此补丁下载官网正式文件修改,可直接覆盖!如果未下载 20100106补丁包 的用户,可使用 第一个 function_common ,已使用补丁包的,下载第二个!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

cjlyr 发表于 2010-1-24 00:42:50 | 显示全部楼层
先留个脚印!
回复

使用道具 举报

iamxyh 发表于 2010-1-24 00:45:09 | 显示全部楼层
我有这个问题,但是我自己写了个函数解决了。因为我的农场不和UCH挂钩而与论坛挂钩,所以没有刷分后果。但没想到是程序的问题,我以为是我的服务器的问题。。。
回复

使用道具 举报

joun98 发表于 2010-1-24 12:04:50 | 显示全部楼层
测试一下是不是这个问题
回复

使用道具 举报

grasshoper 发表于 2010-1-24 19:58:36 | 显示全部楼层
强帖留名!
回复

使用道具 举报

joun98 发表于 2010-1-25 00:06:51 | 显示全部楼层
第一个方法解决了,果然是服务器时区问题,感谢~!
回复

使用道具 举报

 楼主| liuzhly 发表于 2010-1-25 08:33:27 | 显示全部楼层
第一个方法解决了,果然是服务器时区问题,感谢~!
joun98 发表于 2010-01-25 00:06



    谢谢!!

看来windows主机都没问题,出问题的都是linux主机了,时间问题看来官方要加强了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-5-18 19:04 , Processed in 0.100615 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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