MyBB定时任务问题:每1分钟自动重建论坛/帖子计数器无效
修复MyBB自动重建计数器定时任务的问题
问题分析
你当前的代码存在两个核心问题:
- 执行顺序颠倒:论坛计数器依赖主题的统计结果,先重建论坛再重建主题会导致论坛统计基于旧数据
- 未清理缓存:MyBB会缓存论坛统计数据,重建后不清理缓存,首页不会显示更新后的数值
修复后的代码
<?php require_once 'global.php'; require_once MYBB_ROOT.'inc/functions_rebuild.php'; require_once MYBB_ROOT.'inc/functions.php'; require_once MYBB_ROOT.'inc/functions_cache.php'; // 引入缓存操作函数 function task_recount_rebuild_all_counters($task) { global $db, $mybb, $lang; // 第一步:重建所有主题计数器 $query = $db->simple_select("threads", "tid", '', array('order_by' => 'tid', 'order_dir' => 'asc')); while($thread = $db->fetch_array($query)) { rebuild_thread_counters($thread['tid']); } // 第二步:重建所有论坛计数器(必须在主题之后) $query = $db->simple_select("forums", "fid", '', array('order_by' => 'fid', 'order_dir' => 'asc')); while($forum = $db->fetch_array($query)) { // 更新父论坛列表(论坛结构变动时需要,可选保留) $update['parentlist'] = make_parent_list($forum['fid']); $db->update_query("forums", $update, "fid='{$forum['fid']}'"); // 重建当前论坛计数器 rebuild_forum_counters($forum['fid']); } // 第三步:清理MyBB缓存,确保首页加载最新数据 rebuild_forums_cache(); // 重建论坛缓存 clear_cache('stats'); // 清除全局统计缓存 }
额外注意事项
- 任务注册:在MyBB后台「定时任务」中添加该任务,设置为每分钟执行,函数名填写
task_recount_rebuild_all_counters - 性能优化:如果论坛主题/帖子数量庞大,每分钟全量重建可能拖慢服务器,建议改为每小时执行,或添加分批处理逻辑
- 权限验证:确保定时任务执行用户拥有数据库更新和缓存操作的足够权限
内容的提问来源于stack exchange,提问作者J. Igor
相关产品推荐
相关产品推荐

