PHP开发笔记's Archiver

fangzhen 发表于 2009-5-14 15:19

dz6.0统计发帖量为0的解决方案

给更新昨日发帖数进行日志记录
打开include/db_mysql.class.php
在 [list=1][*]function query($sql, $type = '') {[*]                global $debug, $discuz_starttime, $sqldebug, $sqlspenttimes;[/list]
[i]复制代码[/i]
下添加 [list=1][*]if(strpos($sql,'historyposts')){[*]        writelog('historyposts_log', "SQL语句:".$sql.";\r\n执行页面:".CURSCRIPT."\r\n执行时间:".time()."\r\n\r\n\r\n");[*]}[/list]
[i]复制代码[/i]
日志记录文件会在 forumdata/logs目录下

通过日志记录分析发现,在非常接近的时间内执行了两次计划任务,有可能是在高并发的情况下两个人分别执行了计划任务导致的,

临时的存在有点问题的修正方法

include\crons\todayposts_daily.inc.php 文件中

把 [list=1][*]$query = $db->query("SELECT value FROM {$tablepre}settings WHERE variable='historyposts'");[*]$historypost = $db->result($query, 0);[*][*]$hpostarray = explode("\t", $historypost);[*]$historyposts = $hpostarray[1] < $yesterdayposts ? "$yesterdayposts\t$yesterdayposts" : "$yesterdayposts\t$hpostarray[1]";[*][*]$db->query("REPLACE INTO {$tablepre}settings (variable, value) VALUES ('historyposts', '$historyposts')");[*]$db->query("UPDATE {$tablepre}forums SET todayposts='0'");[*][*]require_once DISCUZ_ROOT.'./include/cache.func.php';[*]$_DCACHE['settings']['historyposts'] = $historyposts;[*]updatesettings();[/list]
[i]复制代码[/i]
改为 [list=1][*][color=red]if($yesterdayposts!=0){[/color][*]$query = $db->query("SELECT value FROM {$tablepre}settings WHERE variable='historyposts'");[*]$historypost = $db->result($query, 0);[*][*]$hpostarray = explode("\t", $historypost);[*]$historyposts = $hpostarray[1] < $yesterdayposts ? "$yesterdayposts\t$yesterdayposts" : "$yesterdayposts\t$hpostarray[1]";[*][*]$db->query("REPLACE INTO {$tablepre}settings (variable, value) VALUES ('historyposts', '$historyposts')");[*]$db->query("UPDATE {$tablepre}forums SET todayposts='0'");[*][*]require_once DISCUZ_ROOT.'./include/cache.func.php';[*]$_DCACHE['settings']['historyposts'] = $historyposts;[*]updatesettings();[*][color=red]}[/color][/list]
此方法在昨日发帖数真正为零的情况下也不会执行计划任务去更新昨日发帖数,导致论坛的昨日发帖数始终不为0

fangzhen 发表于 2009-6-2 08:51

楼上的这种做法并不能根本上解决问题。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.