本帖最后由 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;
}
} |