discuz论坛dx2.0远程附件设置详解

1

分类 : 网络日志 | 发表时间 24-05-2011

前几天discuz论坛的dx2.0正式版本发布,并随着中国站长大会的再一次召开,dx2.0火热的升级了一把,大量火热的站长把自己的论坛升级到了dx2.0,但也有大量的站长却被这样那样的故障狠狠的冰冷了一把。discuz论坛,说实在的,靠一个下砂何其忙也!这就不多说了。

dx1.5版本时,就花费一些时间设置论坛的异地远程附件,折腾了好久,没有设置成功,具体原因也非常朦胧。dx2.0时,由于论坛不得不再次移至国外,但想把附件放在国内服务器上,于是再次开始折腾远程附件的设置。

设置不成功时,不知道所以然,设置成功后,也就很简单。

后台,全局-上传设置-基本设置:

本地附件保存位置:

./data/attachment

本地附件 URL 地址:

h ttp://远程域名/data/attachment

全局-上传设置-远程附件:

启用远程附件:是

启用ssl连接:否(远程ftp无ssl)

ftp服务器地址:远程服务器ip

ftp服务器端口:21

ftp账号:你的ftp账号(最好权限足够,能够建立目录、建立文件和删除文件等)

ftp密码:1*******1

被动模式(pasv)连接:否

远程附件目录:./web/data/attachment(ftp软件登陆后三个目录,web/log/db等,这样的形式就这样选,特别情况大家可自己测试改变)

远程访问url:h ttp://你的域名/data/attachment

FTP 传输超时时间:0

连接测试:嘿嘿,自然是成功啦!

隐藏远程附件真实路径:否

另外,特别注明一下:

dx2.0中的涉及ftp的这两个文件,是从discuz论坛上有人提供下载更新的,也没注意是否和官方的一样,但是用这两个文件后,就设置成功了。

/source/class/class_ftp.php

下载:http://discuzdeveloper.googlecode.com/svn/trunk/Discuz!X/upload/source/class/class_ftp.php

/source/admincp/admincp_checktools.php

下载:http://discuzdeveloper.googlecode.com/svn/trunk/Discuz!X/upload/source/admincp/admincp_checktools.php

如果这个链接下载失效了,大家还在用dx2.0,需要这两文件的话,留言就行。

dx2.0现在设置以后,已经可以实现把附件上传到远程服务器上去,并且本地不会留存备份,出现双份现象。至于以前附件,执行以下语句,注意,语句和以前流行的已经不一样了:

update pre_forum_attachment_0 set remote = ’1′

update pre_forum_attachment_1 set remote = ’1′

……………………………………………………

update pre_forum_attachment_9 set remote = ’1′

经过这样一设置,远程附件才完善了些。不过,过程也确实够折腾的,差点直接去微博上CC童虎去了;戴志康陪马化腾等高级网络牛人们吃饭,但家里这一摊子也得照顾完善吧?昨日成就今日,今日也能影响明日。

修改限制discuz论坛用户名注册

0

分类 : 网站技术 | 发表时间 26-04-2010

限制用户名的注册 [特殊符号,英文字母,数字等]

1、打开register.php,查找

$query = $db->query("SELECT * FROM $tablepre}settings WHERE variable IN

2、在下面添加 (注意是下面~不是后面~)

if (ereg ("[a-z]", $username))
    showmessage("对不起,只能用[汉字]注册用户名,请返回重新填写。");  
if (ereg ("[A-Z]", $username))
    showmessage("对不起,只能用[汉字]注册用户名,请返回重新填写。");  
if (ereg ("[0-9]", $username))
    showmessage("对不起,只能用[汉字]注册用户名,请返回重新填写。");  
if (ereg ("[?|~|!|@|#|$|%|^|&|*|,|.|/]", $username))
    showmessage("对不起,只能用[汉字]注册用户名,请返回重新填写。");  
if (ereg ("[`|'|-|<|>|:|\|+|=]", $username))
    showmessage("对不起,只能用[汉字]注册用户名,请返回重新填写。");

保存~上传~

可以根据需要自行修改规则~~只是提供个样板

还有一种方法是在UC注册设置那导入以下禁止注册用户名。

http://club.linwan.info/thread-117989-1-1.html

Discuz X全新概念产品 Discuz!X 1.0 体验包发布

0

分类 : 业界动态 | 发表时间 28-03-2010

前些天参加河南站长聚会时,就获得了一些有关Discuz X的演示图片,感觉似乎在融合门户。论坛在国内的情势,康盛应该也有感觉。这个X,就有包含所有的意思,把现有康盛的产品融合展现,另外也可以融合其他利用ucerter接口的产品,这些都算是一种尝试性的进步,Linker的论坛已经被折磨得,穷途末路了,对待这样的版本,也基本不感冒了。唯一还有一点希望的就是,希望有人发布一个类似资讯的模板,这样,论坛的数据,就有出路了。

看看这个Discuz! X 1.0的体验包吧!传闻可以支持分表了。

产品介绍
Discuz!X是康盛创想(Comsenz)推出的一个以社区为基础的专业建站平台,让论坛(BBS)、个人空间(SNS)、门户(Portal)、群组(Group)、应用开放平台(Open Platform)充分融合于一体,帮助网站实现一站式服务。

安装方法
上传到服务器相应目录,访问 你的域名/install/  按照提示进行安装,安装完成后会自动跳转网站首页。

其他说明
1、此版本仅供测试,请勿用于正式建站或升级,谢谢合作~
2、Manyou应用开放平台将于正式版提供

下载地址
http://download.comsenz.com/DiscuzX/Discuz_X1.0_Demo_GBK.zip

关注关注吧!

discuz论坛 编辑勋章时提示“指定用户不存在,请返回。”

0

分类 : 网站技术 | 发表时间 18-03-2010

论坛一位版主的勋章,突然不显示了,比较惊讶,这些都是元老级的会员,不涉及勋章过期的可能,怎么会突然这样呢?

到论坛后台,编辑该会员,编辑勋章,提示:”指定用户不存在,请返回。“

哟呵,开玩笑,别闹大了,把版主的数据丢了,哪就麻烦了!

开始以为是论坛和ucenter通讯问题,后排除此可能。后来搜索discuz论坛,发现很久以前一个哥们也遇到过这问题,是用discuz团队提供的附件修复的此问题。

同类问题可查看:http://www.discuz.net/viewthread.php?tid=1317355

修复问题的工具:http://www.discuz.net/viewthread.php?tid=764483

很多站长出现cdb_members表有和cdb_memberfields表里没有的数据,导致后台不能修改该会员的信息,下面这个插件就是批量将cdb_members表里有而cdb_memberfields表里没有的数据进行修复
方法:将附件里的程序解压缩,然后放到论坛根目录下,在web下执行http://论坛地址/repairmemberfields.php即可.

注意:请先备份数据后执行,否则产生的后台概不负责。

注:使用工具修复后,勋章依然显不出来,需要重新编辑勋章,添加勋章,才可以.

修改限制discuz论坛注册名长度

3

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

论坛这种网站形式火热以来,就不断受到垃圾ID注册者、垃圾贴的骚扰,特别是现在网络营销的兴趣,大量的人肉注册id和人肉发贴的形式也广为出现,更有甚至,利用软件来注册ID,收藏发软文。总之,无所不用其极。今天,Linker介绍的只是一个小方法,根据朋友论坛的一些情况,做一些小小的限制。

其实限制论坛用户名注册长度,phpwind论坛很容易设置,奇怪discuz论坛搞得这么复杂?

discuz论坛,由下砂的说法,不建议大家来修改论坛用户名的长度,Linker也看了一些修改的方法,确实涉及到很多数据库表中字段的长度,以及程序代码上的配合,对于一般网站站长来讲,这人修改是有些危险,会引起其他一连串的问题,这个方法,不多讲,稍后Linker稍转载一些。

Linker今天所说的修改方法,不是要延长用户名的长度,而是要限制注册长度不能够太小,因为一些论坛注册机,会随机注册一些中文夹杂英文或者数字的注册,Linker大概浏览了一下,长度不外乎两个汉字一个英文或者一个数字,前段同限制了夹杂数字的注册,情况略有好转,但发现还有不少是汉字夹杂英文的注册,明显不知所以,明显是人肉营销者的ID,因此,考虑把discuz论坛用户名长度由最小的3个字符限制到7个字条,这样最少需要三个汉字和一个字母或者7个字母才能验证注册,两个汉字夹杂一个字母的注册就无法通过了。

修改方法:

打开模板文件中:templates.lang.php,查找“用户名小于3个字符”,修改为“用户名小于7个字符”,例如下:

 ’register_profile_profile_username_tooshort’ => ‘用户名小于7个字符’,

修改模板文件:register.htm 搜索以下内容:

if(unlen < 3 || unlen > 15) {
messagehandle_register(1, unlen < 3 ? profile_username_tooshort : profile_username_toolong);
return;
}

修改为:

 if(unlen < 7 || unlen > 15) {
  messagehandle_register(1, unlen < 7 ? profile_username_tooshort : profile_username_toolong);
  return;
 }

大家对比一下就明白了,把3改为7.

修改说到这里,Linker就打算适可而止了,不打算再作进一步的限制和研究了,其实也没找到真正的限制修改代码,内行人都看得出来,这只是一个表现现象,实际上即使注册时提示有“7个字符”的限制,你依然可以提交注册。

仅算抛砖引玉吧!欢迎高人再继续给一个指点。

discuz论坛也有修改用户名注册长度的提问,但官方对此不热情,可能修改实在过于繁琐,Linker搜索到一篇比较详细点的:

DISCUZ修改注册用户名长度的办法 discuz修改注册用户名的长度限制的方法 discuz的用户名限制不能超过15个字符长度,如果想要改的更长一些可以按照下面的方法修改,不过这样修改之后,如果将来升级的时候可能会带来麻烦,如果discuz新版本仍然将用户名限制在不超过15个字符,将需要对新版本做类似修改才能使用,并且有些需要增加数据表的插件可能也需要做调整.请想好了再做哦.以下按照把用户名长度限制在20个字符进行修改的,如果你想改成其他数值,那把下面的内容里的20改成其他数字就可以了!

首先,到discuz后台系统工具里数据库升级里执行:

alter table cdb_activityapplies modify username varchar(20);
alter table cdb_adminnotes modify admin varchar(20);
alter table cdb_announcements modify author varchar(20);
alter table cdb_banned modify admin varchar(20);
alter table cdb_creditslog modify fromto varchar(20);
alter table cdb_members modify username varchar(20);
alter table cdb_orders modify admin varchar(20);
alter table cdb_posts modify author varchar(20);
alter table cdb_pms modify msgfrom varchar(20);
alter table cdb_promotions modify username varchar(20);
alter table cdb_ratelog modify username varchar(20);
alter table cdb_rsscaches modify author varchar(20);
alter table cdb_sessions modify username varchar(20);
alter table cdb_threads modify author varchar(20);
alter table cdb_threads modify lastposter varchar(20);
alter table cdb_threadsmod modify username varchar(20);
alter table cdb_trades modify seller varchar(20);
alter table cdb_trades modify lastbuyer varchar(20);
alter table cdb_validating modify admin varchar(20);
alter table cdb_words modify admin varchar(20);

然后修改
各个模板目录下的register.htm(如果有的话)
把 maxlength="15" id="username" 里的15改成20
把 if(unlen < 3 || unlen > 15) { 里的15改成20

修改register.php把 if(strlen($username) > 15) { 里的15改成20

修改各个模板下的templates.lang.php,messages.lang.php(如果有的话)
把 超过 15 个字符 里的15改成20

修改wap/include/login.inc.php
把maxlength=\"15\" 里的15改成20

修改wap/include/pm.inc.php
把maxlength=\"15\"里的15改成20

最后就是修改api目录下的 passport.php,shopex.php,siteengine.php

if(strlen($memberfields['username'] = preg_replace("/(c:\\con\\con$|[%,\*\"\s\t\<\>\&])/i", "", $memberfields['username'])) > 15) {
$memberfields['username'] = substr($memberfields['username'], 0, 15);
}
里的15改成20

这里discuz论坛也有一篇方法和对文件的修改,由于需要金币购买,Linker不多转了:

http://www.discuz.net/viewthread.php?tid=1279272

discuz论坛限制重复主题,重复回复,连续回复,回复自动整合与要求中文回复的解决代码

2

分类 : 技术文摘 | 发表时间 17-09-2009

由于论坛的自由与共享,社区论坛火了这么些年,也有很多大的社区成功转型,获得了大把的金钱和流量,当然这是一个健康的循环模式,这些成功的社区模式无疑属凤毛麟角,另外还有更多的千万社区,还在垃圾与矛盾中徘徊,发展方向、技术、人力、资源等等,这都是问题。Linker结识的一些玩论坛的朋友,大多以玩为主,因此,谈不上战略发展,因此,对于discuz论坛的一些功能代码修改,都非常无助,辛苦在discuz论坛上和网络上搜索了半天,很多也是不得要解,今天,Linker特意寻找了一些有关discuz论坛限制重复主题,重复回复,连续回复,回复自动整合与要求中文回复的解决代码。

一、比如限制重复主题、重复回复的代码修改:

打开 include/newreply.inc.php, 查找:

$attachment = empty($attachments) ? 0 : 1;(discuz6.1的代码)

$attachment = empty($attachments) ? 0 : ($imageexists ? 2 : 1);(discuz7的代码)

在下面增加

// ********************* 重复回帖检测 *****************************

$repeatlevel = 2; // 重复回帖的验证级别,后面有详细说明。

$chk_sql = "SELECT COUNT(*) FROM {$tablepre}posts WHERE ";
$chk_term = "";
switch($repeatlevel) {
case 1:
$chk_term = "subject=’{$subject}’";
break;
case 2:
$chk_term = "message=’{$message}’";
break;
case 3:
$chk_term = "subject=’{$subject}’ AND message=’{$message}’";
break;
case 4:
$chk_term = "subject=’{$subject}’ AND message=’{$message}’ AND authorid=’{$discuz_uid}’";
break;
}
if($chk_term) {
$chk_num = $db->result($db->query($chk_sql . $chk_term), 0);
if($chk_num > 0) {
showmessage(‘请不要重复回帖,这很浪费资源的。请返回。’);
}
}
// ********************* 重复回帖检测 *****************************

 

关于回帖的重复检测级别,直接修改 $repeatlevel 参数就行了。下面是当这个变量的值为1~4的时候所代表的级别:

1 – 标题与数据库里的记录一致即算重复
2 – 内容与数据库里的记录一致即算重复
3 – 内容、标题与数据库里的记录都一致算重复
4 – 内容、标题、用户名与数据库里的记录都一致算重复

备注:上述代码据Linker测试验证,有着很大的弊端,在回复时会有大量的等待现象,可以得知是在遍历数据库查询,因此对于发贴和回复量比较大的论坛,Linker不建议采用这些办法来限制主题与回复的重复。

二、限制回复中文:

修改include/newreply.inc.php

找到  $author = empty($isanonymous) ? $discuz_user : ”;

在其下一行加入:

if(preg_match_all("/[\xB0-\xF7][\xA1-\xFE]/",$message,$regs)<=3) showmessage("请输入4个中文以上!");

这个方法,Linker在采用,速度显示很快,并且限制了诸如连续字母、连续数字、连续符号等输入,从而促进会员的主动回复。

三、还有一个限制主题与回复重复的方法,Linker没有具体测试,看代码,似乎也是遍历数据库查询的办法,也有可能造成回复的迟钝延时,但据discuz论坛网友说明,是付费获得的方法,有需要的朋友可以具体测试一下:

1,修改include/newreply.inc.php

找到

$author = empty($isanonymous) ? $discuz_user : ”;

在其下一行加入

        if($subject&&$db->result_first("SELECT * FROM `{$tablepre}posts` WHERE `subject` LIKE ‘$subject’ limit 0,1")) showmessage("<script>alert(‘标题与已有标题重复!’);history.go(-1)</script>");
        if($db->result_first("SELECT * FROM `{$tablepre}posts` WHERE `message` LIKE ‘$message’ limit 0,1")) showmessage("<script>alert(‘内容与已有内容重复!’);history.go(-1)</script>");

2,修改include/newthread.inc.php

找到

$db->query("INSERT INTO {$tablepre}threads (fid, readperm, price, iconid, typeid, author, authorid, subject, dateline, lastpost, lastposter, displayorder, digest, special, attachment, subscribed, moderated)
                VALUES (‘$fid’, ‘$readperm’, ‘$price’, ‘$iconid’, ‘$typeid’, ‘$author’, ‘$discuz_uid’, ‘$subject’, ‘$timestamp’, ‘$timestamp’, ‘$author’, ‘$displayorder’, ‘$digest’, ‘$special’, ‘$attachment’, ‘$subscribed’, ‘$moderated’)");

在其上一行加入

if($db->result_first("SELECT * FROM `{$tablepre}threads` WHERE `subject` LIKE ‘$subject’ limit 0,1")) showmessage("<script>alert(‘标题与已有标题重复!’);history.go(-1)</script>");

四、连续回帖自动改为在上面一楼追加【实用·长帖自动不追加·版块黑白名单】,测试discuz7有效。

//连续回复自动合并

$_insertword = "\n\n$discuz_userss 于 ".date("$dateformat $timeformat",
$timestamp)." 补充以下内容\n\n";//追加内容前缀

$_maxlength = 80;//字符数大于此值则一律不合并,注意1中文=2字符(GBK)或3字符(UTF)

$_reducesmile = 1;//设为1=去除表情之后计算字数,0=否

$_reducequote = 1;//设为1=去除引用之后计算字数,0=否

$_reducespace = 1;//设为1=去除空白换行之后计算字数,0=否

$_blackfids = array(18);//版块FID黑名单,此名单内不进行合并

$_whitefids = array();//版块FID白名单,此名单内进行合并,黑白名单同时存在时白名单
无效

//设置部分结束

if($_blackfids && $_whitefids) unset($_whitefids);

$temp = $message;

if(is_array($smilies))if($_reducesmile) foreach($smilies as $sm) {

$temp = str_replace($sm['code'], ”, $temp);

}

if($_reducequote) $temp = preg_replace("/\s*\[quote\][\n\r]*(.+?)[\n\r]
*\[\/quote\]\s*/is", ”, $temp);

if($_reducespace) $temp = preg_replace("/\s/is", ”, $temp);

$temp = trim($temp);

$length = strlen($temp);

unset($temp);

if($length <= $_maxlength && (!$_blackfids || !in_array($fid, $_blackfids))
&& (!$_whitefids || in_array($fid, $_whitefids))) {

$q = $db->query("SELECT authorid, pid FROM {$tablepre}posts WHERE
tid=’$tid’ ORDER BY pid DESC LIMIT 1");

$q = $db->fetch_array($q);

if($q['authorid'] == $discuz_uid && !$attachment && !$isanonymous) {

$message = $_insertword . $message;

$db->query("UPDATE {$tablepre}posts SET smileyoff = 0,
bbcodeoff = 0, message = CONCAT(message, ‘$message’) WHERE pid=’{$q['pid']}’");

showmessage(‘post_reply_succeed’, "viewthread.php?
tid=$tid&pid={$q[pid]}&page=".(@ceil(($thread['special'] ? $thread['replies'] :
$thread['replies'] + 1) / $ppp))."&extra=$extra#pid{$q[pid]}");
}
}

//连续回复自动合并

上述代码本来还有管理组不受限的功能,Linker觉得无此必要,管理组也不能特殊嘛,有需要的朋友,去discuz论坛搜索。

OK,有了这些,Linker觉得,已经方便很多了,但另一方面,Linker同时也告诫大家,论坛是要发挥会

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页面”了。

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