discuz论坛帖子出现html乱码的解决思路

1

分类 : 网络日志 | 发表时间 10-03-2009

现在论坛社区这种模式,明显没有以前火爆了,这一年多以来特别明显,既没有软件破解的百家争鸣,也没有很成功的社区盈利模式可以参考,虽然也时而有什么门户网站应用哪个论坛程序,上下资讯榜,但在整个国内整个互联网来看,是明显的没落,明显的萧条了;论坛如此,博客这个模式,何尝不是如此呢?

从动网论坛的asp以来,再到后来的phpwind,以及现在的discuz,Linker玩过的国内外论坛,可谓不少,没有上百也有几十家了,因此,在使用期间,也经常转换论坛数据。在转换论坛过程中,总是会出现,出现帖子内容出现大量html乱码的问题,这有可能是不同论坛对不同的ubb代码解释不一致,也有可能是,是否启用html代码解释功能有关,今天帮朋友给把这问题给解决了一把。

事情起源于使用火车头采集器,采集一些行业内容到discuz7论坛上去;有关采集的评论,Linker不想说太多,一件武器有好的方面,也有坏的倾向,关键在于使用者,Linker一直偏好于摸索使用各方面软件,对于采集类软件,火车头是接触最早最多的,但自从火车头发布3.x版本以后,火车头采集器的免费版本功能就限制很多了,因此关注也少了许多。

朋友的站是一个产品行业站,带了一个discuz论坛,增加一些网站的收录,给主域名增加一些浏览量,以使排名好看些,这问题应该不大。他选择了一个站点,说不要太多,挑一挑,采个二百多条就行了,采集后他慢慢整理修改。规则、发布模块的,都好搞,很快就制定好了,但在测试发布时,有一个小问题,如果发布时使用UBB形式,帖子内容、图片都好控制版面,并且引用下载资料的url地址也显示链接正常,但有关ftp的下载地址就不行了,不仅识别不了,还被转换成了ubb代码,诸如:linwan.net.cn.rar,默认情况下,discuz论坛的ubb是不解释ftp的链接的,以前见到有高人修改过,但现在怎么找也找不到了,这就麻烦了。如果是人工,禁用掉discuz代码,启用html,发布正常;如果在采集发布时,使用html形式,发布后全是包含了html代码的帖子版面,惨不忍睹。

不说中间的尝试过程了,更有甚者,Linker在discuz后台连屏蔽替换功能都用上了,也没解决掉,不过最后还是在discuz论坛上,找到了一个稍费周折点的办法。

在discuz的cdb_posts表中,有一个字段“htmlon”是控制着,该贴是否启用html识别功能;首先在火车头采集器中,还是用html形式发布,采集发布完以后,用phpmyadmin执行如下语句,当然,如果discuz管理后台没有关闭可执行sql语句功能,在那个数据库升级页面执行也可以。

UPDATE `cdb_posts` SET `htmlon` = ’1′ //后面where是条件,如果全部都启用,就不用带。

WHERE `cdb_posts`.`fid` =3 //这是指限制执行id为3的版块

and `cdb_posts`.`tid` > 105 //这是限制执行帖子id大于105

and `cdb_posts`.`author` =’admin’// 这是限制执行作者为admin的帖子

and `cdb_posts`.`useip`=’123.10.53.93′//这是限制执行发布者ip

主要还是让htmlon值为1,这样在发布以后,虽然是乱码,但经过这个字段的值修改,帖子就启用了html代码解释功能,帖子版面就正常了,那个ftp链接,源站点是什么样子,这里也显示什么样子。当然,版块要启用html功能。

如果是手工发布,想把启用html设置为勾选状态,可以直接修改模板post.htm,把html那里加如checked=“checked”就可以了,同样,论坛后台要开启该版块支持html。

过程就是折腾,折腾并辛苦快乐着。

利用mysql数据库中的TMD表修复论坛错误“is marked as crashed and last (automatic?) repair failed”

6

分类 : 网络日志 | 发表时间 09-03-2009

洗了把手,回到座位上,重新换了茶叶,续上水,然后点了根烟,吐一口舒心的烟圈,然后来细细描述一下,刚才的惊心之旅,是修复mysql数据库的惊险经历。

有几个朋友,论坛搞得都比较大,几位朋友都属于那种只会运营网站但几乎不懂任何网站技术的那种类型,现在这样类型的成功站长越来越多,相反,像Linker这样的崇拜技术至上的半吊子,总是在初级阶段,不断徘徊,不能不说是一种讽刺。由于接触时间长了,关系都比较要好,因此这些论坛在技术支持上,几乎全部都由Linker来维护,这问题倒也不大,几年都过来了,一直按计划有条不紊的维护、升级,期间有些小问题,都有惊无险的度过了,但这次,虽然事后也可以说是有惊无险,但不能不说是,是近几年来,比较险的一次了。

其中一位朋友的综合论坛,运营已经有快三年了,会员达到了十几万,每天也有上万的ip,几万的会员浏览登陆,近几天他说,论坛运行可能有些问题,主要体现在速度上,在执行写入、浏览页面时,页面会有明显的停顿现象,并且还有会员反映,会看到打不开页面,页面出现sql乱码的情况。针对这些情况,Linker心中已经有些概念,于是今晚午夜,决定对数据库进行一下例行维护。

修复论坛错误“is marked as crashed and last (automatic?) repair failed”的几种方法一文中(有些朋友可不大厚道,摘录了此文,作为自己的原创,更有甚至,改头换面,取其精华,作为自己的投稿、原创来做,让人汗颜,今晚搜索有关这方面问题时,才知道竟然有了这么多的CP,在遗憾之余也有些欣慰),第三种方法来修复数据库中的一些碎片,优化数据库的效果还是比较好的,并且速度也比较快,使用phpmyadmin太麻烦,使用discuz论坛提供的tools集合工作,修复起来速度太慢不说,几乎没有起过作用的,可能对于一些小的表错误问题,会起些作用。

登陆上服务器,以前的例行维护,是按照以下方法来做:

停掉mysql:net stop mysql,然后cd命令符至mysql的bin目录,再执行命令:myisamchk -r D:\MySQL\data\数据库名称\*.MYI,回车确定后,修复进程就在不断的一个表一个表,一行一行的修复中,这是discuz论坛上的童虎推荐的方法,效果比较好,推荐拥有独立服务器的使用,长期以来,Linker也一直在使用此方法来优化数据库,效果很好。但这次使用时,犯了一个错误。

也许是例行维护时间太长了吧,有些麻痹大意了,登陆上去以后,首先作了一些其它系统维护,然后就直接打开cmd,执行:myisamchk -r D:\MySQL\data\数据库名称\*.MYI,突然之间,本地主板的小喇叭连串的响了起来,这一报警不打紧,Linker立刻想起来,mysql服务还没有停掉,这样修复会直接破坏掉表的。马上关掉命令行窗口,然后立刻停掉mysql服务,再次打开cmd,执行:myisamchk -r D:\MySQL\data\数据库名称\*.MYI,本地主板小喇叭依然在响了七八次以后,然后才正常修复其它表,直至结束。心中有感不妙。

开启mysql服务,打开网站,惨了’members’ is marked as crashed and last (automatic?) repair failed,很明显,members表坏掉了,并且使用myisamchk 命令还修复不好。登陆phpmysql,显示cdb_members表在使用中,查看物理路径下表,对比了一下,一个月以前的备份,大小似乎正常。

到google、百度上搜索有关修复mysql数据库表crashed的文章,发现有关这方面的话题,除了Linker的“修复论坛错误“is marked as crashed and last (automatic?) repair failed”的几种方法”外,就属discuz论坛的这个页面流行度比较广,不外勿文初所述的三种方法,这三种方法,皆不能解决这个问题。查到国外的vbulletin.com论坛,看到有关帖子,并且还是由总版主、管理员回答的这方面问题,都是说此表已经损坏,修复几乎不可能,建议用备份来恢复,看到这些“权威”的论断,Linker心里真是“拔凉拔凉”的,由于朋友的论坛数据库比较大,因此Linker就有些懈怠,一个月左右才备份一次,这要把这个cdb_members表恢复到一个月前去,上万名会员数据就这样没了,并且可能还有着其它一些不可知的问题。

有关修复mysql数据库,还有一个命令:mysqlcheck

mysqlcheck -a -c -o -r –all-databases -uroot -p //这条命令是即可最佳化所有db数据库。

参数的意义如下:
-a = Analyse given tables.
-c = Check table for errors
-o = Optimise table
-r = Can fix almost anything except unique keys that aren’t unique

如果是在win主机下,修复指定的表,使用:mysqlcheck -o -r 数据库名称 -u root -p,在提示输入密码的框中,输入mysql的root管理密码,mysqlcheck即会对数据库进行检测修复。但很遗憾,Linker在使用了这个命令后,虽然成功执行了,但论坛表错误依旧,没有解决问题。

难道真的只有使用备份数据表来恢复了?……

打开备份的数据库目录,打开当前使用的数据库目录,看cdb_members三个表,两个目录切换来切换去,但突然感觉到,怎么有点不对?备份中的是:cdb_members.MYD,但有问题的数据库中,这个名称的表却是:cdb_members.TMD,奇怪了?正常情况下,没有看到TMD扩展名的表啊?这个TMD的扩展名可是味够浓的。

mysql数据库,数据表有三个文件支持,比如表 a041574875:
a041574875.MYI –> 索引文件
a041574875.MYD –> 数据内容文件
a041574875.frm –> 表结构文件

这个时候,却变成了
a041574875.MYI –> 索引文件
a041574875.TMD –> ?
a041574875.frm –> 表结构文件

mysql的TMD表究竟是什么文件?TMD文件是执行myisampack后生成的压缩文件,它可使文件压缩40%—70%。Linker也没查到更多的相关说明,只是发现有评论,称此文件出现,可能与硬盘问题有关,比如逻辑坏道等。Linker由此想来,估计和没有停掉mysql服务而执行myisamchk有关,这个TMD文件可能是一个备份或者待恢复机制下产生的文件。

不管那么多,通过扩展名排列目录结构,把所有TMD扩展名结尾的表全部修改为MYD结尾,然后再次执行“myisamchk -r D:\MySQL\data\数据库名称\*.MYI”(这些操作是在停掉mysql服务情况下进行的),这次没有再出现小喇叭报警的情况,执行完毕后,打开论坛,天啊,论坛页面打开正常了。赶快停掉数据库,重新备份数据库至其他服务器。至此,数据库总算给修复回来了。另:如果数据库表修复后,还会有出现TMD扩展名表的情况,就要真的查一查是否是硬盘的问题了。

这里说明一下,mysqlcheck 用在数据库服务器在运行的时候,而 myisamchk 必须是在数据库服务器被关闭的时候,因为它可能会和数据库本身的操作起冲突,会导致你的错误还没被修复,而新的损坏确已经出现。务必务必!

在有关使用mysql的TMD表恢复数据库的方法中,Linker最终查到的是知盾安全论坛中,2006年的一个帖子:用 TMD 文件修复损坏的 mysql 的数据库某个表,Linker到最后才发现,作者和Linker的问题几乎一致,并且解决思路也一样
,只是有一点点区别,Linker修改表的扩展名由TMD修改为MYD,执行Myisamchk后,数据库正常了,而知盾论坛文中,却没有解决,而是在使用mysqldump恢复数据库了以后,然后修改扩展名,数据库才正常的。

直到最后,总结一下,经历了那么多,查询了很多解决方案和实例,想了那么多思路,尝试了很多方法,事实上最终解决方法也是比较简单的。其中,也确实有幸运的成份。

给自己提个醒,硬盘有价,数据无价,再上两个硬盘,组Raid,专用来备份数据,使用计划任务来自动备份。另外,在处理长年累月的例行维护时,千万要头脑清醒,有条不紊、按步就班的持续进行,千万不要自恃已经非常熟悉了,而马虎大意;往往给事情造成重大损失的,不是什么也不会的生手,反而是有比较高权限的熟手。

上述的教训和敬告,要千万注意了。

“有道快贴”–网易推出类贴吧微论坛产品

1

分类 : 业界动态 | 发表时间 09-02-2009

这个“微论坛”称呼应该是比较别致了吧,搜索了一下,发现不是Linker的首创。

网易最近两年可以说是大手笔不断,比如最近的各类大型开源软件的网易镜像下载源测试网易“右键邮”邮箱客户端沙画现场表演 网易有道新闻发布会博客阅读工具:网易有道阅读器上线网易也提供免费域名邮局了,现在更牛,可以说是更大的举动:推出类似百度贴吧微论坛的产品–网易快贴。

直接访问http://tie.youdao.com进入有道快贴首页,有道快贴看起来跟百度贴吧有点类似,可以自由创建版面,不过目前已经有很多版面了,而且有的人气还不低,看来已经内测过一段时间了,不过还有很多热门话题版面没有被注册,比如百度贴吧上很热门的明星版面,大家注意及时抢了!

特别关注:有关于百度贴吧的例子,网易快贴这类形式,对于优化某些关键词及服务、产品、业务等,可是一个不错的宣传渠道啊!

有道快贴--网易推出类贴吧微论坛产品

有道快贴--网易推出类贴吧微论坛产品

dede帝国cms添加mysql数据库最小权限实现cms和论坛系统跨数据库查询

2

分类 : 网络日志 | 发表时间 07-02-2009

现在大多数资讯类系统,一般站长都比较青睐php、mysql组合,这类cms系统中以dede和帝国更为普及,在帝国系统中调用论坛数据,这个应用需求比较常见,cms和论坛系统使用同一数据库时,这样调用时,使用帝国论坛上提供的方法,如果是dede网站系统,使用dede的后台向导就可以直接实现,但如果cms和论坛使用不同的数据库,前提是在同一服务器、同一mysql服务环境下,就不能直接调用了,这涉及到mysql用户的多数据库权限,以及mysql的跨数据库查询问题。

这个问题很久以前就曾经多次在帝国论坛咨询过,但没有具体实施方法,由于平常也不以帝国类网站为生,因此对这些问题还是建立在考虑可能性的层面,今日朋友又提此事,觉得也不算大的难题,就稍费点时间试一下。结果,完美成功。过程如下:

假设:帝国cms数据库名为:ecms,用户名为:ecms_user,discuz论坛数据库名为:discuz,用户名为:discuz_user

要在帝国网站中调用discuz论坛的当天最新贴,首先为discuz论坛添加帝国网站系统的用户访问权限,这里只添加查询(select)权限,确保安全。用root登陆phpmysql后,直接在sql中运行以下语句:

GRANT select on discuz.* to ecms_user;

这时就可以在帝国模板中添加灵动标签的论坛当天最新贴查询了:

<table width="100%" border="0" cellspacing="0" cellpadding="1">
[e:loop={"select tid,subject from discuz.cdb_threads order by tid desc limit 10",10,24,0}]
<tr><td>
<a href="http://www.xxxxxx.net/thread-<?=$bqr[tid]?>-1-1.html" target="_blank"><?=$bqr[subject]?></a>
</td></tr>
[/e:loop]
</table>

数据更新后查看,数据就生成了,这数据可是实在的标题和链接调用,不是一般的discuz论坛的js数据调用,不管对于页面加载速度和网站的优化来说,都有好处。

注意上述语句的:

<a href="http://www.xxxxxx.net/thread-<?=$bqr[tid]?>-1-1.html" target="_blank"><?=$bqr[subject]?></a>

如果你没有加载论坛的伪静态效果,要替换为:

<a href="http://www.xxxxxx.net//viewthread.php?tid=<?=$bqr[tid]?>" target="_blank"><?=$bqr[subject]?></a>

不然打开链接时就要出现“404页面”了。

discuz官方论坛的502页面

2

分类 : 业界动态 | 发表时间 06-02-2009

前几日曾经帮过朋友优化了下discuz论坛,今日受他之托,让帮给他论坛重新换一个比较个性一点的模板,这个比较简单,discuz论坛上面还是有很多很精品的共享模板的。但打开discuz论坛时,却发现了一些有意思的事情。

打开主页的时候,应该直接打开论坛主页的登陆页面的,但有意思的是,却打开了一个502页面。

 Discuz论坛的502页面

我们大家都比较清楚404以及302、301页面,对这个502页面却是知之不多,这是一个什么情况下服务器反馈的页面呢?

有关网页反馈502页面的问题说明:

1.502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

2.是语音网关拒绝请求,一种可能是网络负载大,另一种可能是请求没在可以通过的权限之内。

3.坏门户代理服务系统收到了无效答复从在上游服务器。

另外, 502 坏门户错误遇到当设法使用ErrorDocument 处理请求502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

一、此类问题多发生在 Discuz 的论坛上。
二、此问题一般由于后置服务器问题引起的。
三、有可能是在代理服务器环境下使用了过滤软件引起的,比如早期版本的ISA就有一个补丁专门解决这个问题。

解释下原因502 Bad Gateway 如果服务器,作为gateway或者proxy存在,从下行服务器上接收到了一个非法的应答(这个应答对应的请求是本服务器为了完成请求而转发给下行服务器的)。关于502 Bad Gateway的问题目前也仅此而已。

有关apache下用Http代理时502 Proxy Error错误解决方法,可以参考这里:http://javadonkey.javaeye.com/blog/218672

我当时登陆discuz时使用的是cc的代理,不知道是否和这个情况有关,不过当时出现这个情况时,刷新就OK了。

还有一个小现象,也比较异常,昨日发贴数为0,discuz出现这现象的机率不大吧? 

现在很多论坛内部出现问题,总是大事化小、小事化了,给外界一个模糊的感觉,事实上,这样一来,外界也会给当事者一个模糊的感觉,这样长此发展下去,反而对这样的门户网站不利。

英文水平不行怎么混迹国外的英文论坛

2

分类 : 网站技术 | 发表时间 02-08-2008

互联网,共享精神是其精髓,自由是其发展的天空。自从即时通讯给大家带来惊喜和刺激以后,留言板和电子公告系统,也随之流行起来,特别是论坛,给大家的学习和娱乐,提供了更加广阔的平台。之前的动网,我的印象是更偏向于娱乐一些,大量的娱乐插件和美化模板充斥其中。之后,国内大量的技术论坛蜂拥而起(虽然现在已经没落,和国家的大力倡导软件正版化还是有很大关系的,但软件的应用交流之道,反而更有发展潜力了),国内论坛发展得如火如荼。

作为站长来说,大家都知道,国内论坛一般获得国外软件或者比较先进的技术,都是要慢半拍的,比较鲜明的例子就是操作系统的版本总是英文正式版的先出,谁让计算机上英文大兴天下呢?包括各式各样的系统补丁、好用的国外应用软件,都是英文的先出;更为先进的计算机应用技巧,也是在国外的技术交流论坛平台上,交流居多;技术,这算是一方面,另外一方面,站长关注的收入问题,大家都知道google的英文广告收入会大大高于中文站的中文广告,因此,如果能够混熟悉国外站,更进一步来讲,更好的建立英文站,对于一个个人站长来说,也是一件很有成就感的事。英语四、六级的高手,别往下看了,您请便吧!

首先找个合适的论坛,自己稍感兴趣点的,比如:gentoo forums了,里面牛人无数,聚集了世界上最顶尖的linux geeks,讨论气氛非常之浓厚,大多数人都是就事论事,还有就是在这里发帖的人来自世界各地,英语还差的大有人在,总而言之就是能搭话就搭话,不能搭话就别废话,国外论坛不像咱们的百度贴吧。

常见的论坛用语:懂英文不一定能混坛子,老外太geek了,时不时就来点缩写或geek语来炫耀自己。下面这些是经常看到的:

OP : Original Poster 中文论坛常说的楼主
OT : Off Topic 离题,扯太远了
IMHO : In My Humble/Honest Opinion 在我看来,非常谦卑的说法,怕说错话的话最好用上这个
ROFL : Rolling On Floor Laughing 都笑到在地上打滚了,还能咋说…不要老用LOL了
AFAIK : As Far As I know 据我所知
ASAP : As Soon As Possible 尽快
WTF : What The Fuck TMD怎么…
TIA : Thanx In Advance 先谢了
AKA : Also known As 又名
OTW : On the way 正在的意思,例如我问”Did you send me the file”,你可以说”it’s OTW”
WIP : Work In Progress 理解为持续更新的话比较符合中国人的习惯,也可以理解为正处在beta阶段,下话就是我可不会为你的任何损失承担责任的
SO : Significant Other 重要人士,通常理解为另一半…我在那篇HOWTO: Download porn without your significant other knowing 看到了这个单词:D..很有趣的一篇geek型帖子!
Ricer : A person who makes unecessary modifications to their most often import car (hence the term “rice”) to make it (mostly make it look) faster 自己理解英文吧,我就一句话:瞎折腾的人
n00b : 这个单词相当于newbie,就是新手级的,刚注册的账号一般都是n00b等级
Apprentice : 学徒级的,开始上路了
Guru : 导师级了
l33t : 这个是典型的geek文字,黑客们喜欢用这个单词,指的是精英级(Elite)人物。Elite被简写为LEET,而黑客们喜欢用3代替E(T喜欢用7,I喜欢用1代替)…后来不知道怎么演变就成了l33t这种正常英语与黑客英语结合的geek文字了。
Veteran : 大师级了! 星球大战里的绿矮子尤达就可以称为Veteran。
Moderator : 我们认为的斑竹,删你帖子没商量的那种。

英文论坛里的模块英语:帖子在英文中用thread一词,发帖子则是post a thread。需要注意的是现在大部分论坛不用BBS一说了,而是forum,不过我们通常会给 forum加上一个s,表复数。因为论坛里通常包含数个版块subforum,每个subforum都会有Moderator[斑竹]负责的。

怎么在论坛里发表回复:老外没有吹水的习惯,没事别去来个啥up(顶)之类的chinglish啊!如果你实在是想表达对OP犹如滔滔江水连绵不绝的景仰之情,你可以说”nice trick/tips/howto”或者”that’s exactly what i want”甚者”YOU’RE A GENIUS!” [大写加粗表强调]。如果别人帮你解决了一个问题,你要感谢他的话,可以说”wow,it works…thx very much”或者还是那句”nice trick/tips”,当然还有极其肉麻的”YOU SAVE THE DAY”…一般人我不跟他说D!

当然,在gentoo forums这类论坛里沙发,板凳儿的都是拍砖/找碴贴,老外会很细心的看完你的文章,然后费劲心机地给你挑错。别把这种行为当做是对自己的羞辱,如果你能引来N位高手给你挑错的,你太NB了!一般的帖子高手们都不愿意看的。

有时,你需要在一篇回覆里回覆数位大哥的话,我们用以下格式:

@ Bush: You son of a bitch!

 

@ Kenny: You bastards! –quoted from Cartman in Southpark

是的,要用@,不用的话就用粗体显示人名,俺们不用To sb.这种方式了…

怎么在论坛里发布自己的帖子:在英文论坛里发帖远比回帖需要勇气,英文水平次点的,要把一件事讲清楚还真不容易。首先我们得有个好的标题,标题尽可能的用简单的语言说明你的问题,不要用啥 beg for.. (跪求)。如果是求问型的,我们可以用诸如Can we kick Bush’s ass…指导性帮助别人的帖子,可以用HOWTO: Kill Bill Gates with an invisible bleeding sword…如果你用Anyone ever met this issue恐怕只能吸引一小部分人进去瞅瞅咋回事

相对于标题,帖子正文部分尽可能详细,尽量解释清楚,多花点词语解释清楚,虽然有可能让老外看的有点烦,总比让老外糊涂的好…例如这句话 People like you are why gentoo gets a bad name就让老外…连我都糊涂了。所以楼下的问他 you have bad English ;) Could you tell it another way?。

好吧,在结束帖子的时候,通常是另取一行,写上Regards就表示”此致敬礼”了,求问的话就来句 TIA吧。

还有就是你求助的问题已解决的话,就在日志标题前面或后面加注[solved]。以免浪费别人时间走进来一看,哦,原来已经搞定了,我插不上手了。

签名:很多人都喜欢给自己加个论坛签名,就是帖子最下面的信息。有些是很有意思,例如曾经风靡一时的:

configure && make && make love

这本来是一个最基本的linux程序源码编译步骤configure && make && make install。

有兴趣没?您如果有比较有意思的论坛,咱一块逛逛去!!

引篇绝非原创源为:http://www.zhuaxia.com/item/110185671,但抓虾引用地址打不开,暂时记录这个吧!

修复论坛错误“is marked as crashed and last (automatic?) repair failed”的几种方法

2

分类 : 网络日志 | 发表时间 04-04-2008

以前就讨论过很多论坛方面的问题,比如修复论坛数据库、优化论坛数据库以及优化论坛的访问负载能力,特别是这个discuz6版本,默认安装下的版本,真的是性能不敢恭维,难道稍大一点的论坛,都要用专用服务器来抗吗?难道每一个稍大点论坛都要有一个精通discuz论坛代码、精通mysql数据库的技术人员吗?这策略,太让人难以接受,以前的版本包括最近的discuz5.5就非常好,只是功能上稍欠缺了一些而已!因此,论坛,性能也是很重要的,phpwind这方面做得就是比discuz好,当然,最近几个phpwind版本,也在这方面有所忽视了。

今天遇到的这个问题过程是这样的:一个朋友论坛,他说有几个月没有优化了,discuz官方说,过几个月,可以优化一下数据库,提防碎片过多,影响论坛速度,因此我就登陆到他论坛后台,先更新了下系统缓存,然后直接点击优化数据库,提示有二百多M碎片数据表需要优化,这已经非常多了,默认是选择所有需要优化表状态,直接点击提交,进行优化。优化时,网站已经不能访问了,然后连接服务器,也出现连接非常缓慢的情况,怀疑是优化时占用资源过多,引起服务器响应不过来其他请求,假死机了。继续远程连接,仍然连接不上,无奈,只有关掉刚才的优化网页,依照经验,这时候是不能让机房重启服务器的,这种硬性的重启是非常容易损失表以及表中的数据库。关掉优化网页以后,等了一会,可以连接上远程桌面了,此时网站网页已经提示错误代码“posts’ is marked as crashed and last (automatic?) repair failed”,看越来是posts表损坏,自动修复没有成功。这个表存有大量的帖子数据,是非常重要而关键的表,这个表如果损失不能修复,论坛就要麻烦大了。

想了想,依据以前的经验,discuz论坛官方提供的有数据库修复文件“repair.php”,把此文件上传至网站后,在浏览器中运行此文件,可以依照提示“检测并修复数据库一次”或“检测并修复数据库五次”,用此文件没有用,修复完以后,状态都提示OK,但网页访问故障依旧。用discuz官方提供的“tools.php”,发现检测和修复数据库功能和“repair.php”差不多,只是集成了一些其他的工具。

到discuz论坛,以关键字“修复”搜索了下,发现童虎有一篇贴子“教你如何修复数据表”,其中提到了几种方法来修复数据表:

服务器非法关机,有可能会对部分数据库造成一定影响。一般运行会报错,**.MYI 不能打开。 Can’t find file: ‘***.MYI’ 请使用repair.php或者使用phpmyadmin修复一下数据表。

1.上传repair.php到论坛根目录下,然后在浏览器运行http://你的论坛地址/repair.php
一般点击第一个链接“repair.php?html=1&check=1”就可以修复了,
如果不能修复可以尝试点击第二个连接“repair.php?check=1&iterations=5”
就可以了。
提醒:修复完表操作以后一定记得要从服务器删除这个文件repair.php

2.使用phpmyadmin修复数据表
进入论坛数据库,然后选择要修复的表,在页脚下拉框选择“修复”即可。

3.如果您的服务器是独立主机强烈建议使用命令行方式进行修复:
修复前将mysql服务停止。
如果是Win主机,打开命令行方式,然后进入到mysql的/bin目录。
执行myisamchk -r d:\mysql\data\discuz\*.MYI
其中d:\mysql\data\discuz\换成您的数据库所在路径。
如果是类Unix主机,直接使用myisamchk -r 数据库目录\*.MYI 即可。

其中我用第二种办法时,在phpmyadmin中显示此表正在使用中,phpmyadmin修复操作无法对此表进行修复操作。那就用第三种办法了,朋友服务器用的是win服务器主机,于是打开命令行,首先停止mysql服务:net stop mysql,然后进入到mysql的bin目录,输入:myisamchk -r d:\mysql\data\discuz\*.MYI,如果是能确认是哪个表,也可以把前面的*号直接换为具体的表名称,一般全部修复没问题。回车确定后,修复进程就在不断的一个表一个表,一行一行的修复中了。

修复过后,启动mysql数据库,net start mysql,然后到浏览器,打开论坛页面,试着浏览帖子,发贴等,已经全部正常,至此完全恢复OK。

经验就不多说了,在操作过程中中断是非常可怕的事,当然,关机断电更可怕。另外,更重要的一点就是在出问题以后,进行操作修复以前,一定要停掉mysql,然后直接到data目录中,备份好你的数据库,这很关键;一定要是停掉mysql以后备份。备份,是一个很好的习惯!呵!!

网站改域名换程序之phpwind转discuz论坛后如何保住流量减少搜索引擎收录损失

0

分类 : 技术文摘 | 发表时间 26-12-2007

此问题详细情况如下:

phpwind论坛,运行已经两年,主题贴七万余,百度收录10万余,gg收录一万多,ip5000左右,pv 10的左右;一直启用pw的伪静态。现打算转换为discuz6,并结合SupeSite5.5.5/X-Space3.0.5建立门户网站。并且也打算discuz6和SS都启用伪静态。

请问如何保障以前phpwind的收录失效访问问题,能够尽量保障平衡过渡。seo中最忌的一项就是变换网站程序,但怎么样减少损失,转换后有没有什么手法可以尽量弥补?404转向rewrite静态规则转换

有没有一种静态规则,可以使phpwind论坛的read-htm-tid-547653.html形式,转换为thread-547653-1-1.html,个人感觉应该有这种规则,只是苦于不会写这种规则,比较郁闷。另外,在phpwind论坛转换为discuz论坛方面,还有没有这方面的更好的建议和方法?

这个问题,比较典型,因此,专门搜集了一些实例来详细解说一下问题。更换域名,用301永久定向,这确实没有问题。更改站程序,用404失效页面转向,这也没问题,符合搜索引擎的规则,但就是对用户体验不好,会损失一定的流量和用户可信度。有没有更好的办法?

phpwind转Discuz!论坛后 保持搜索引擎带来的流量之rewrite 规则了,以IIS为例,以下是伪静态规则代码,需要iisrewrite api插件。

# phpwind – Discuz! 规则

RewriteRule ^(.*)/read-htm-tid-([0-9]+)\.html$ $1/viewthread\.php\?tid=$2
RewriteRule ^(.*)/read\.php\?tid-([0-9]+)\.html$ $1/viewthread\.php\?tid=$2
RewriteRule ^(.*)/thread-htm-fid-([0-9]+)\.html$ $1/forumdisplay\.php\?fid=$2
RewriteRule ^(.*)/thread-htm-fid-([0-9]+)-type-([0-9]+)\.html$ $1/forumdisplay\.php\?fid=$2&filter=type&typeid=$3
RewriteRule ^(.*)/thread-htm-fid-([0-9]+)-search-digest\.html$ $1/forumdisplay\.php\?fid=$2&filter=digest
RewriteRule ^(.*)/profile-htm-action-show-(username|uid)-(.*)\.html$ $1/space\.php\?action=viewpro&$2=$3
RewriteRule ^(.*)/thread-htm-fid-([0-9]+)([a-z\-]+)([0-9]+)\.html$ $1/forumdisplay\.php\?fid=$2&page=$4
RewriteRule ^(.*)/read-htm-tid-([0-9]+)-page-([0-9]+)-fpage-([0-9]+)\.html$ $1/viewthread\.php\?tid=$2&extra=page%3D1&page=$3
RewriteRule ^(.*)/read\.php\?tid=([0-9]+)$ $1/viewthread\.php\?tid=$2
RewriteRule ^(.*)/thread\.php\?fid=([0-9]+)$ $1/forumdisplay\.php\?fid=$2
RewriteRule ^(.*)/thread\.php\?fid=([0-9]+)&type=([0-9]+)$ $1/forumdisplay\.php\?fid=$2&filter=type&typeid=$3
RewriteRule ^(.*)/thread\.php\?fid=([0-9]+)&search=digest$ $1/forumdisplay\.php\?fid=$2&filter=digest
RewriteRule ^(.*)/simple/index\.php\?(t|f)([0-9]+\.html)$ $1/archiver/?$2id-$3
RewriteRule ^(.*)/profile\.php\?action=show&(username|uid)=(.*)$ $1/space\.php\?action=viewpro&$2=$3
RewriteRule ^(.*)/thread\.php\?fid=([0-9]+)([a-zA-Z=&]+)([0-9]+)$ $1/forumdisplay\.php\?fid=$2&page=$4
RewriteRule ^(.*)/read\.php\?tid=([0-9]+)&page=([0-9]+)&fpage=([0-9]+)$ $1/viewthread\.php\?tid=$2&extra=page%3D1&page=$3

从动网到DZ如何保住流量的站长进入

# Discuz4.10 Rewrite规则

RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index\.php\?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay\.php\?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread\.php\?tid=$2&extra=page\%3D$4&page=$3
RewriteRule ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro\.php\?$2=$3

#以下是我的论坛rewrite样本:

#A:动网rewrite到Discuz
RewriteRule ^(.*)/index\.asp\?[bB]oard[iI][dD]=([0-9]+)$ $1/index\.php\?gid=$2
RewriteRule ^(.*)/dispbbs\.asp\?board[iI][dD]=([0-9]+)&[iI][dD]=([0-9]+)$ $1/viewthread\.php\?tid=$3
RewriteRule ^(.*)/index\.asp\?[bB]oard[iI][dD]=([0-9]+)&[pP]age=([0-9]+)$ $1/forumdisplay\.php\?fid=$2&page=$3
RewriteRule ^(.*)/dispbbs\.asp\?board[iI][dD]=([0-9]+)&[iI][dD]=([0-9]+)&page=([0-9]+)$ $1/viewthread\.php\?tid=$3&page=$4

论坛改域名,如何保住流量,httpd.ini的规则怎么加

IIS的环境,DZ6.0,域名由www.xxx.cn/bbs改为bbs.xxx.cn,搜索引擎收录的都费了,怎末修改httpd.ini文件,添加规则,使www.xxx.cn/bbs/*****的地址全都转到bbs.xxx.cn?

1.在原先网站(www.xxx.cn)目录下新建bbs目录
2.* 打开internet信息服务管理器,在欲重定向的目录(BBS)上按右键
    * 选中“重定向到URL”
    * 在对话框中输入目标页面的地址HTTP://BBS.xxxx.cn$S$Q
    * 切记,记得选中“资源的永久重定向”
    * 还有需要说明的是必须勾上上面输入准确的URL(sunyabc老兄的就不需要,很诡异的事情啊)
    * 当然,最后要点击“应用”

动网转DZ不使用rewrite保住SEO流量的最简单办法

 动网论坛中,只是把帖子的dispbbs.asp页面的ID参数变一下,有办法获取asp也面url传入的参数吗,于是查来好久资料,找到一个<%=request("ID")%>说可以获取参数值。于是又是研究了半天,最后找到一种使用HTML中Meta标签方法<Meta http-equiv="Refresh"  Content="0; Url=)%>">,运气好成功了  

修改dispbbs.asp源文件为

代码:

<Meta http-equiv="Refresh" Content="0; Url=论坛所在目录/viewthread.php?tid=<%=request("ID")%>">

修改printpage.asp源文件修改为

代码:

<Meta http-equiv="Refresh" Content="0; Url=论坛所在目录/viewthread.php?tid=<%=request("ID")%>">

对论坛的版块分类的重定向小弟就无能为力,只有定向到首页算了

代码:

<Meta http-equiv="Refresh" Content="0; Url=论坛所在目录/">

根据的我只把dispbbs.asp 内容改成这样,直接转向会影响seo的,搜索引擎会当你作弊

代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

你访问的页面已经更改地址,请点击下面的新地址进入
">viewthread.php?tid=<%=request("ID")%>

 
PW论坛转换成DZ论坛后的原静态URL失效问题完美解决方案
 
很多的朋友的PW论坛伪静态化之后,论坛地址全部变成:
read-htm-??.html
thread-htm-???.ht
ml
转换到DZ论坛后势必会流失大量的搜索引擎过来的URL,如何让它继续有效呢?

1、在http.conf有关虚拟主机的  <IfModule mod_rewrite.c></IfModule>之间加上以下代码

代码:
RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index.php?$2
RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)\.html$ $1/forumdisplay.php?fid=$2&page=$3
RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ $1/viewthread.php?tid=$2&extra=page\%3D$4&page=$3
RewriteRule ^(.*)/profile-(username|uid)-(.+)\.html$ $1/viewpro.php?$2=$3
RewriteRule ^/thread-htm-fid-([0-9]+)(.*)\.html$ /forumdisplay.php?fid=$1 [L,R]
RewriteRule ^/thread.php(.*)$ /forumdisplay.php$1 [L,R]
RewriteRule ^/read-htm-tid-([0-9]+)(.*)\.html$ /viewthread.php?tid=$1 [L,R]
RewriteRule ^/read.php(.*)$ /viewthread.php$1 [L,R]
RewriteRule ^/home.php$ /index.php [L,R]
RewriteRule ^/simple/ /archiver/ [R]
RewriteRule ^/notice.php /announcement.php [R]
RewriteRule ^/notice-htm-(.*)\.html /announcement.php [R]
RewriteRule ^/job-htm-(.*)\.html /index.php [R]
RewriteRule ^/job.php /index.php [R]
RewriteRule ^/bt.php /forumdisplay.php?fid=99 [R]
RewriteRule ^/bt-htm-(.*)\.html /forumdisplay.php?fid=99 [R]

2、在archiver/index.php里找到

代码:
if($tid) {
        $action = 'thread';
        $forward = 'viewthread.php?tid='.$tid;
} elseif($fid) {
        $action = 'forum';
        $forward = 'forumdisplay.php?fid='.$fid;
} else {
        $action = 'index';
        $forward = 'index.php';
}

在它之前加上

代码:
$R_URL=substr(($cutchar=strrchr($REQUEST_URI,'?')) ? substr($cutchar,1) :'',0,-5);

if($R_URL){
        $R_URL_A=explode('_',$R_URL);
        $prog=substr($R_URL_A[0],0,1);
        $id=(int)substr($R_URL_A[0],1);
        $page=(int)$R_URL_A[1];
}else{
        $prog='';
}

switch($prog){
        case 'f':
                $fid =& $id;break;
//                include_once(R_P.'simple/mod_thread.php');
        case 't':
                $tid =& $id;break;
//                include_once(R_P.'simple/mod_read.php');
        default:
//                include_once(R_P.'simple/mod_index.php');
}

不过这时一定要启用Achiver静态化,不然Achiver就没用了;

 

转换到Discuz!后,保住流量,使用永久重定向来进行页面的跳转(动网为例)

(1) asp 版: 需要同时支持 asp 和 php 的支持. 将压缩包中的文件解压出来放到论坛的根目录即可.

永久重定向dvjumpdz之asp版.zip[(1.57 KB)  

(2)php 版: 需要做如下操作:先在脚本处添加.asp后缀用phpisapi.dll来解析,和添加.php后缀文件一样的方法.

永久重定向dvjumpdz之php版.zip (1.59 KB)

其他论坛,同理修改

phpwind论坛转为discuz!论坛后,对于以前phpwind论坛的搜索引擎收录处理上,这是相当多站长担心的问题。因此,更换网站域名、转换网站程序,能够提前处理好这方面情况,对于平衡转换是很有帮助的。讲述中以动网转discuz!论坛为例,讲了一些利用iisrewrite重写api来实现的转换,也讲了phpwind转换discuz方面的转换伪静态规则代码,简单提示了一下永久重定向设置等,代码多引用自discuz论坛,各个网站针对自己特殊情况可做些修改,如有对规则不熟悉的地方,可以搜索网络了解转换规则。

手动关闭gzip方法(phpwind、discuz和supesite)

2

分类 : 网络日志 | 发表时间 05-11-2007

前段时间,禁论坛禁得厉害;因此,很多主机商不得不安装了主机关键字过滤系统,这个星外的监控过滤系统,新版本加入了关闭gzip的选项(因为gzip模式是加密压缩传输,如果不关闭这个选项,就无法监控过滤关键字),由此就引起了一些php系统关闭gzip的方法讨论,很多朋友在询问一些系统的关闭方法,就此简单总结一些常用的;如果是直接登陆系统后台修改,就需要由主机商来提供合作,暂时关闭监控过滤系统或者关闭自己域名的监控,如果主机商无法提供合作(当然,这不一定是不愿意,而是有关安全操作等方面的问题),就需要先手动关闭,然后登陆后台再关闭。

phpwind论坛系统:

\data\bbscache\config.php
修改:
$db_obstart=’1′;

$db_obstart=’0′;

登录论坛后台,找到论坛核心设置–核心功能设置,禁止GZIP功能。

后台登录地址为:http://您的域名/admin.php

discuz论坛系统:

方法一:
使用ftp进入论坛
将  forumdata/cache/cache_settings.php 下载到本地,

修改里面的
‘gzipcompress’ => 1,

改成
‘gzipcompress’ => 0,

修改完成后保存。上传回去。你的论坛就可以访问了。

然后登录论坛后台,找到基本设置–服务器优化,禁止GZIP功能。

后台登录地址:http://您的域名/logging.php?action=login

方法二:

把附件里的程序上传到你的论坛根目录下。运行即可。

关闭gzip.rar

运行后页面空白,但gzip己经关闭了。再打开首页即可

方法三:

尝试使用tools工具 升级sql:

UPDATE `cdb_settings` SET `value` = ’0′ WHERE CONVERT( `variable` USING utf8 ) = ‘gzipcompress’ LIMIT 1 ;

tools工具下载
http://www.discuz.net/thread-761181-1-1.html

升级后 清除forumdata/cache和forumdata/templates下面的文件,然后重新访问

supesite网站系统:

登录FTP,修改data\system目录下的config.cache.php文件,找到’gzipcompress’ => 1,,改为:’gzipcompress’ => 0,,然后进入后台正式关闭

SupeSite/X-Space后台地址为:http://您的域名/?action-login

清除本地cookie

4、ShopEx 商城:

4.7.1版本解决办法:由于ShopEX设计上的缺陷,无法单独修改设置,需要下载经过修改index.php文件替换您的网站根目录下的index.php 点击这里下载

4.7.2版本解决办法:在根目录的include目录中找到mall_config.php文件(此文件在安装成功后都会有的),在?>前增加下面一段话就可以关闭系统的gzip功能
define(‘SYS_GZIP’, false);

ShopEx 商城后台地址为:http://您的域名/syssite/shopadmin/

5、SaBlog 博客:

登录FTP,下载cache/cache_settings.php这个文件,将第64行的
‘gzipcompress’ => ’1′,
修改为
‘gzipcompress’ => ’0′,
然后上传覆盖回去即可。

SaBlog 博客后台地址为:http://您的域名/?action-login

6、动网PHP版本论坛:

登录FTP,下载论坛根目录下的global.php,查找以下内容,
if (!$zliboutputenable AND function_exists(‘ob_gzhandler’)) {
$db_obstart = 1;
修改为
if (!$zliboutputenable AND function_exists(‘ob_gzhandler’)) {
$db_obstart = 0;
然后上传覆盖即可。

7、Ecshop:

ECSHOP 管理中心 – 商店设置 -基本设置-是否启用Gzip模式: 禁用

phpwind6去掉底部init.phpwind.com联盟代码的方法

0

分类 : 网络日志 | 发表时间 30-10-2007

林海谐缘论坛昨日升级到了phpwind6的版本,对于底部那串联盟代码,觉得很是不奈,因此,查找了去除的方法:

在论坛根目录,有一个“global.php”文件,用记事本打开,删除以下代码:

 $output.="<script language=\"JavaScript\" src=\"http://init.phpwind.com/init.php?sitehash={$GLOBALS[db_sitehash]}&v=$wind_version&c=0\"></script>";

然后,再查看论坛源代码,底部已经没有了吧?呵

无觅相关文章插件,快速提升流量