首页 > 网站 > 建站经验 > 正文

3.1SP1-将风讯的数据库设置到虚拟目录外的方法

2024-08-30 19:06:11
字体:
来源:转载
供稿:网友

本文讨论区:http://bbs.foosun.net/dispbbs.asp?boardID=22&ID=16236&page=1

风讯的功能很大,但不知道大家有没有碰到这个问题?
现在许多虚拟空间都提供了专用数据库防下目录,但这个目录一般在WEB虚拟目录之外,要用../的方式引用才可以。
为了安全,总想将数据库放在虚拟目录之外,但由于风讯使用相对于虚拟目录的绝对路径,
而使我们无法用 ../date 的方式引用虚拟目录前的文件。本人为此写了一个插件,此文件可将引用地址设置为相对于磁盘的绝对路径引用。就是将目录转换为F:/xx/xx 的方式。

假设你的网站FTP目录在F:/webroot/myfile
而你的WEB虚拟根目录在myfile下的web文件里。在myfile下还有一个data目录放一个名为data.mdb的数据库文件。
下面为实现方法,

第一步、新建一个文件名为 VirtualPath.asp 文件内容如下:

<%
Function VirtualPath(Way,PathName,DelPath)
Dim MainPath,ArrayPath,Num,TempPath,i

Select Case UCase(Way)
Case "MAINPATH"
MainPath=Server.MapPath("/")&"/"
Case "FILEPATH"
MainPath=Request.ServerVariables("PATH_TRANSLATED")
Case Else
Response.Write "您输入的参数有误,第一个参数请输入MainPath或FilePath。使用MainPath将以站点所在的虚拟目录为参照截取;FilePath将以当前文件所在目录为参照截取。"
Response.End
End Select

ArrayPath=Split(MainPath,"/")
Num=UBound(ArrayPath)

IF DelPath<>"" Then
For i=0 to Num
IF UCase(ArrayPath(i))= UCase(DelPath) Then
Exit For
End IF
Next
IF i>Num Then
Response.Write "没有您要截取的目录,请检查参数的正确性。也可设置为空,此时将使用全部目录。"
Response.End
End IF
End IF

TempPath=ArrayPath(0)
For i=1 to Num-1
IF UCase(ArrayPath(i))<>UCase(DelPath) Then
TempPath=TempPath & "/" & ArrayPath(i)
Else
Exit For
End IF
Next

VirtualPath=TempPath Replace(PathName,"/","/")
End Function
%>

第二步、

将新建的文件 VirtualPath.asp 放在风讯的INC目录里。找到风讯INC目录下的 Cls_DB.asp 这个文件
在第一行增加代码 <!--#include file="VirtualPath.asp" -->
在文件 Cls_DB.asp 里找到代码 Server.MapPath(DataBaseConnectStr) 用下面的代码代替
VirtualPath("mainpath",DataBaseConnectStr,"web")

到现在为止 大功告成。注重 VirtualPath 函数的几个参数,

第一个参数可设置为 mainpath 或filepath 设置为 mainpath 则表示相对于站的WEW虚拟目录
设置为 filepath 则表示相对于VirtualPath.asp文件的所在目录。
第二个参数表示要设置的数库地址
第二个参数表示要截取的目录,例如 F:/webroot/web 假如如下设置的VirtualPath("mainpath","/data/data.mdb","web")
最终产生的路径为 F:/webroot/data/data.mdb

现在你明白了吗?此文件不仅可用于风讯,可以用于任何ASP Access的程序。

有爱好的朋友不妨在一起讨论一下。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表