还有人问我我继续详细解释吧。我不保证我说的句句是真理因为我自己也没大量测试过。
希望有人用这个方案的话反馈一下。
【 在 atppp@smth.org-SPAM.no (Big Mouse) 的大作中提到: 】
: 第一,TMPFS要define成1,否则web处理未读标记完全不对;
很多站碰到WEB下未读记录出错的问题,比较严重的毛病是一旦登录过WEB,回到telnet下面发现未读记录完全不对了,这个似乎是TMPFS不是1造成的。总之我自己的站定义TMPFS为1之后从来没有发生过那种情况了。如果站点的TMPFS不是1,按照下面的操作
1) 改动site.h:
#define TMPFS 1
#define TMPFSROOT "cache"
2) 在 ~bbs/ 下面建立 cache 目录
3) 重新编译所有的 BBS 程序,停服务,安装,清共享内存,启动服务。
这样实际上就完成了。不过TMPFS的本意是用内存虚拟盘加速,如果你知道怎么用mount
tmpfs文件系统,就在 ~bbs/cache/ 那里 mount 一个 tmpfs 文件系统,至于多大,我也没经验,我自己站上一般在线10人,~bbs/cache/ 的使用大小是 100k 左右。不过上传文件临时是放在那个地方的,所以也不能太小...我设的是 32M。偏离主题太远先不说这个了。
定义TMPFS为1,未读记录就会临时存放在 ~bbs/cache/ 目录下,如果用户正常退出,未读记录会写回用户 ~bbs/home/ 目录,即使是踢人,好像也能写回。但是如果是系统非正常重新启动,可能 cache 目录下的还没来得及写回,而 tmpfs 文件系统如果碰到重启动自然死翘翘。如果你的站点一味追求用户利益而不在乎效率,可以不用 tmpfs 文件系统,这样未读记录虽然还是放在 ~bbs/cache/ 但是是实实在在的写在硬盘上,一般不会丢。
: 第二,相关的PHP页面(包括文章列表和阅读)要去掉cache,否则即使已读记录改变了你也未必看得到,有时候强制刷新都不管用;
这个会增加很多load,想好了要不要改 :p
改动 bbsdoc.php 和 bbscon.php 可能就差不多了。bbsdoc.php 我注释了这一段
/* if ($isnormalboard&&($default_dir_mode == $dir_modes["NORMAL"])) {
$dotdirname=BBS_HOME . "/boards/" . $brdarr["NAME"] . "/.DIR";
if (cache_header("public, must-revalidate",filemtime($dotdirname),10))
return;
} */
bbscon.php 里面,附件的cache还是可以保留的,但是帖子正文可以不cache,这样可以保证用户点开了那篇文章一定会设置该文章已读。方法是把相关的 if cache_header() 那句判断移动到 if ($attachpos!=0) { 分支里面就可以了。自己动手吧 :p
: 第三,最新的smth代码里面,WEB已经去掉了未读记录的显示,不过很容易加回去。
我站上的 bbsdoc.php 里面有个地方是这样的
echo $flags[0]; //不要未读标记 windinsn //加回去好不好? atppp
这个应该容易改吧...
另外同主题模式其实也有未读标记,不过那个我觉得已经不太有意义了...
--