对付抠门的空间服务商,以前大家想到了用链接数据表的方法存放更大的数据库。现在再给大家讲述另一个方法:用一个论坛的代码运行两个论坛程序。这样可以绕开那些以服务器CPU占用率过大为理由,不许在一个空间架设两套论坛程序的空间服务规定。
一、准备数据库
网上主流的ASP论坛程序(例如动网论坛6.1)大都是以Access数据库为基础的。论坛的全部帖子、用户信息、论坛设置等等都存放在一个数据库文件中。我们需要准备两个论坛数据库文件,然后让论坛程序根据不同的条件打开不同的数据库文件。
将本地机的论坛上传到服务器,然后准备两个数据库分别命名为bbs1.mdb和bbs2.mdb(为了保证论坛的安全,文件名可以改得复杂一些),并上传到服务器的/abc/bbs/data/目录下。数据库既可以使用已有论坛的,也可以用论坛的初始数据库。
二、判定条件
用作判定进入论坛的条件有很多,比如来访者的IP地址、操作系统、访问论坛的时间等。这里笔者用的是来访者提交的URL地址。
一个论坛有可能出现两个不同的地址,例如“www.cpcw.com”和“WWW.CPCW.COM”,两个网址虽然都指向电脑报网站,但在VbScript看来它们是两个不同的ASCII字符串,因为大小写字母被认作不同的字符。所以,大小写不同的两个地址可以做判定的条件。
Request.ServerVariables是获取环境变量的ASP内置对象。用代码Request.ServerVariables("SCRIPT_NAME")的值就是当前执行的ASP页面的路径。例如,访问http://www.scat.com/aBc/test.asp(注意大小写!)时,Request.ServerVariables("SCRIPT_NAME")的值就是:“/aBc/test.asp”。
我们规定两个论坛的地址分别为http://www.scat.com/ABC/bbs和http://www.scat.com/abc/bbs。其实可以用这种方法打开两个以上的论坛,因为从排列组合的角度来看,长度为n的一个URL的大小写组合可以有2的n次方种!
三、修改论坛程序
现在大多数的ASP论坛程序为了编程方便,开启数据库对象的代码都被独立出来放在conn.asp中,其他页面都通过引用这个文件来访问数据库。这样为我们接下来的操作提供了方便。
用文本编辑器打开conn.asp,找到如下代码:
Dim Db
'免费用户第一次使用请修改本处数据库地址......
DB="datadvbbs6.mdb"
程序定义了Db这个变量,数据库的相对地址被赋给了这个字符串变量。稍后程序打开数据库对象的时候会用到这个变量的值。
我们把这几行改成:
Dim Db
Dim Whichbbs
Whichbbs =Request.ServerVariables("SCRIPT_NAME ")
if left(Whichbbs,4)="/ABC" then '使用取左函数截取需要长度的字符串进行验证
Db="/data/bbs1.mdb"
else
Db="/data/bbs2.mdb"
end if
这段代码的意思就是,将访问者提交的地址赋值到Whichbbs这个变量中。由于访问者在论坛中活动时,URL地址的后半段是变化的,所以只用Whichbbs的前4位与“/ABC”这个字符串做比较。如果两字符串相同,就给Db赋值"/data/bbs1.mdb";否则Db被赋值"/data/bbs2.mdb"。然后将会打开Db对应的数据库。访问者提交的地址如果是http://asp2.6to23.com/ABC,则论坛系统打开bbs1.mdb的数据库,让访问者进入bbs1.mdb中的论坛;否则打开bbs2.mdb,进入bbs2.mdb中的论坛。
这样,你就可以在一个空间中架设不止一个论坛了,而服务器的资源占用又比单独架设两套独立的论坛系统的方法小很多。
这个方法还可以推广开来:
1.应用到其他涉及到数据库操作的ASP程序上,比如新闻系统、下载系统、留言板、计数器等等。
2.用访问者IP地址做判定条件(Request.ServerVariables("REMOTE_ADDR")),做成变相的、更隐蔽的IP过滤,让不受欢迎的人不知不觉地被隔离在真正的论坛之外。
3. 根据自己的需要,用其他信息作判定条件,打造你富有个性、多姿多彩的论坛。