You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:46:08