很多人会认为直接DB::query(“UPDATE “.DB::table(‘common_setting’).” SET svalue=’$onlinerecord’ WHERE skey=’onlinerecord'”);的sql语句不就行了吗。
其实不然,重点在要修改在线最高记录是要修改缓存$_G[‘cache’][‘onlinerecord’]的值,如果你不修改这个缓存值并且新的在线人数又不高于缓存中最高记录,数组$onlineinfo根本不会重新被赋值,也就没法完成清零 ,哪怕你把表的’common_setting’的值改为“0 1314XXXXXXX”,最高记录会依然读取缓存最高记录。
难点就在$_G[‘cache’][‘onlinerecord’])从何而来,变量追溯cache的值要读pre_common_syscache 这个表,缓存数据data`是 mediumblob 这个数据类型,只能在程序里面修改,不能sql语句的方法修改,所以得用插件或者单独写个程序页面来清零,也就是用到上面13行的代码save_syscache(‘onlinerecord’, $onlinerecord);来更新缓存的数值。
直接看步骤 很简单
数据库里 找到 pre_common_syscache 这个表里 onlinerecord这一行,点BLOB 这个地方 会直接下载一个.bin的文件
这个文件下载到电脑上可以直接编辑,前面是在线人数,后面是时间戳
附上
时间戳转换工具
https://tool.lu/timestamp/
然后点左边的编辑进入下图
选择刚刚修改的文件,点执行即可。
打开discuz看在线人数,已经更新。