注意:在做这些之前,请先用自定义备份,全部备份论坛的数据表和论坛的所有文件,并确保能恢复成功。
1, 去后台删除插件
在后台¬->扩展设置->插件管理可以卸载掉
2, 删除掉无用的文件夹
Discuz! 5.0纯净版本的文件夹和文件如目录下的files.txt所示,其他文件都是自己添加的或者插件添加的。注:以下几个目录最好不要动
./api 应用程序接口,也就是和外部程序比如支付宝,奇虎,shopex, siteengine挂钩的。
./archiver 静态化,无图版用的。 Discuz Archiver
./attachments 附件存放目录
./customavatars 用户自定义存放目录
./forumdata 论坛缓存,备份数据存放目录
./install 安装sql文件,语言文件存放目录
./ipdata ip数据包
./wap wap网站所需文件
插件一般喜欢添加文件在include,images,plugins,templates以及论坛根目录
3, 用phpmyadmin检查数据表,删除多于的数据表
这部分是最难的,技术成份也最高,不过你看看插件的原始安装数据,然后对比一下自己的数据表就知道哪些能删除了。
通过看install/discuz.sql文件分析出默认Discuz! 5.0存在68个表,这点从phpmyadmin中能直观的看出来,分别是:
引用:
cdb_access
cdb_activities
cdb_activityapplies
cdb_adminactions
cdb_admingroups
cdb_adminnotes
cdb_adminsessions
cdb_advertisements
cdb_announcements
cdb_attachments
cdb_attachtypes
cdb_banned
cdb_bbcodes
cdb_blogcaches
cdb_buddys
cdb_creditslog
cdb_crons
cdb_failedlogins
cdb_favorites
cdb_forumfields
cdb_forumlinks
cdb_forums
cdb_medals
cdb_memberfields
cdb_members
cdb_moderators
cdb_modworks
cdb_myposts
cdb_mythreads
cdb_onlinelist
cdb_onlinetime
cdb_orders
cdb_paymentlog
cdb_pluginhooks
cdb_plugins
cdb_pluginvars
cdb_pms
cdb_pmsearchindex
cdb_polloptions
cdb_polls
cdb_posts
cdb_profilefields
cdb_promotions
cdb_pushedthreads
cdb_ranks
cdb_ratelog
cdb_regips
cdb_relatedthreads
cdb_rewardlog
cdb_rsscaches
cdb_searchindex
cdb_sessions
cdb_settings
cdb_smilies
cdb_stats
cdb_statvars
cdb_styles
cdb_stylevars
cdb_subscriptions
cdb_templates
cdb_threads
cdb_threadsmod
cdb_threadtypes
cdb_tradelog
cdb_trades
cdb_usergroups
cdb_validating
cdb_words
很多插件会添加表和修改表,这些表是完全可以删除的。关于如何删除表看附件:
不过更多的插件选择的是在表中增加字段,这样我们就只能通过修改数据表来达到目标了。如附件:
关于如何检查插件加了哪些数据字段在表里面,我以一个例子来说明:
下载以后解压缩,压缩包中有许多文件,但是一般我们只用看与install有关的东西,其实这里的文件也可以做个参考,让你知道你装这个插件传了多少文件上去了。
打开installpf.php,用记事本就可以了。看人家的代码,我们关注的是数据表的部分,没关系,很容易懂的。看下面的代码:
复制内容到剪贴板
代码:
query("drop TABLE IF EXISTS `cdb_dropitem`");
query("CREATE TABLE `cdb_dropitem` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`itemname` varchar(15) NOT NULL default '',
`cname` varchar(30) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;");其实是很简单的代码的,这几行的意思是,我要加一个cdb_dropitem的数据表,因此这个表就是插件增加的表,如果你不要这个插件了,这个表完全可以drop(删除)掉。
复制内容到剪贴板
代码:
query("drop TABLE IF EXISTS `cdb_itemmarket`");
query("CREATE TABLE `cdb_itemmarket` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`itemname` varchar(20) NOT NULL default '',
`itemnum` smallint(5) unsigned NOT NULL default '0',
`itemmoney` int(10) unsigned NOT NULL default '0',
`itemuesr` varchar(30) NOT NULL default '',
`itemtime` int(10) unsigned NOT NULL default '0',
`itemclass` varchar(30) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM;");
query("drop TABLE IF EXISTS `cdb_mypetatk`");
query("CREATE TABLE `cdb_mypetatk` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`username` varchar(15) NOT NULL default '',
`atker` varchar(15) NOT NULL default '',
`revatk` smallint(5) unsigned NOT NULL default '0',
`atkeratk` smallint(5) unsigned NOT NULL default '0',
`revexp` smallint(5) unsigned NOT NULL default '0',
`atkerexp` smallint(5) unsigned NOT NULL default '0',
`atktime` int(10) unsigned NOT NULL default '0',
`mypetdead` tinyint(5) unsigned NOT NULL default '0',
`atkerpetdead` tinyint(5) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM;");关于这类的代码就容易懂了吧?全是在你的数据库里建立数据表的。
复制内容到剪贴板
代码:
query("INSERT INTO `cdb_npcdata` VALUES (1, '1', '波利', 'm1.gif', 11, 0, 500, 2, 10, 10, 1, '土', 1),
(2, '2', '绿棉虫', 'm2.gif', 13, 0, 550, 3, 13, 12, 1, '土', 1),
(3, '3', '小鸡', 'm3.gif', 15, 0, 600, 4, 16, 14, 1, '火', 1),关于这段代码,意思是往cdb_npcdata数据表中插入数据的。如果删除了这个表,那么所有的数据也就被删除了。
INSERT表示向表里面插入数据。说完了数据表的增加,我们来看看人家插件怎么改变我们已经存在的表
看下面的代码:
复制内容到剪贴板
代码:
query("ALTER TABLE `cdb_mypetdata` ADD `hack` smallint(5) UNSIGNED DEFAULT '0' NOT NULL AFTER `mypetexp`");上面的代码是什么意思?
ALTER TABLE意思就是改变我的数据表,ADD表示就是增加,明白了吧?这个的意思就是,改变cdb_mypetdata的结构,在mypetexp这个字段的后面加一个hack字段。
不过这里不用怎么在意,因为cdb_mypet不是Discuz!的核心表,这个表恐怕你在卸载的时候就已经DROP掉了,不用手动修改它的结构了。懂了这些,看下面的代码是不是很轻松?
复制内容到剪贴板
代码:
query("ALTER TABLE `cdb_mypetdata` ADD `tstk` tinyint(5) UNSIGNED DEFAULT '0' NOT NULL ");
query("ALTER TABLE `cdb_mypetdata` ADD `tsqz` tinyint(5) UNSIGNED DEFAULT '0' NOT NULL ");
query("ALTER TABLE `cdb_mypetdata` ADD `tsfp` tinyint(5) UNSIGNED DEFAULT '0' NOT NULL ");但是如果我们在某个插件的安装文件中找到了类似下面的代码怎么办?
复制内容到剪贴板
代码:
ALTER TABLE `cdb_memberfields` ADD `mypetid` tinyint(5) UNSIGNED DEFAULT '0' NOT NULL很明显,这个就修改了Discuz!核心数据表中的cdb_memberfields,在里面加了一个字段mypetid了,看附件:
怎么删除呢?进入phpmyadmin,打开cdb_memberfields表,找到mypetid这个字段,点那个红色的叉,就能安全删除掉了。
这样,我们得到一个基本适用的万能方法,先备份数据库和文件。然后去后台先删除插件看插件的安装文件或者安装要求升级的sql文件的内容,找出这个插件要在我的数据库里加些什么,改掉些什么,按照我说的方法,该删的删除,该改的改回来。
然后,把你修改过的php文件和html文件修改回来。这样,一个插件就干净卸载掉了,我一直用的这个方法卸插件的。
至于要删除掉所有的插件,我的建议是和一个干净安装的Discuz!5.0,对比两个的数据表差异,一个个对比,找到不同的地方,放心删除。
然后把所有的论坛文件(前面提到的那些目录不用,加上config.inc.php不用)都用最原始的覆盖掉。
这些好了以后,登陆,去后台更新缓存。就可以了!
有了上面的这些,相信各位也知道了关于修改数据库的一些插件如何卸载了,无非就是把数据库改回原来的样子,把新增的文件删除掉,把修改过的文件改回来,不是很难的。
本文只针对新手,希望达到抛砖引玉的目的。
@鑫~#
2006.9.27
[
本帖最后由 @鑫~# 于 2006-9-27 22:12 编辑 ]