虽然是两年前写的,(
http://www.wzei.net/ReadNews.asp?NewsID=28)根本算不上什么技术前沿,但还是常常看到有人在要这样的资料,于是再次贴上,毕竟是原创的。:)
顺便说一下,这几天我已经在整理直接使用odbc功能的serv的资料,需要这方面资料的老师请耐心等几天。
现在已经有很多学校以lan或adsl的方式接入Internet,并且购买了服务器,所以就具备了为教师、学生提供类似中国频道、中国万网提供的虚拟空间服务,即提供web和ftp服务,每个用户能够彼此独立地管理自己的空间。结合Windows2000的iis和serv-u4.0软件就可以很好的实现这一功能。但是serv-u4.0软件没有提供web管理页面,也不是用数据库来记录用户信息,如果一个一个地靠管理员手工输入用户信息,工作量可想而知。为此我参考了一些资料,写了一个asp程序,使它能够配合serv-u4.0软件,成功地实现了在线开通ftp和web服务。我校就用这一asp程序为计算机专业班级的学生开了20M的虚拟空间。
一、编程原理:
serv-u软件是使用ini文件来记录用户信息的。其信息和含义如下:
[GLOBAL] ‘存放系统信息,包括serv的注册信息
[DOMAINS] ‘存放域信息,如:
Domain1=0.0.0.0||21|Domain 1|1|0
[Domain1] ‘域domain1的用户信息,如:
Logging=1
LogIPNames=1
LogFileIPNames=1
User1=admin|1|0
Admin为该域的第一个用户
[USER=admin|1] ‘用户admin的配置信息
Password=admin888 ‘密码,默认状态下,serv使用加密密码
HomeDir=d:/homepage/llm ‘主目录
RelPaths=1
AlwaysAllowLogin=1
ChangePassword=1 ‘是否允许修改密码
DiskQuota=1|20480000|84786 ‘是否启用磁盘配额和磁盘空间大小以及已使用的空间大小
SpeedLimitUp=204800 ‘上传速度
SpeedLimitDown=204800 ‘下传速度
TimeOut=600 ‘空闲时间
Access1=d:/homepage/llm|RWAMLCDP ‘有管理权限的目录
了解ini文件的含义之后,我们只要在这个文件域用户信息和用户信息两处加入相应的信息,就能达到添加用户的目的。Asp的sfo(Scripting.FileSystemObject )组件提供了编辑文本文件的功能,利用这一组件还可以同时为新添加的用户创建文件夹,功能十分强大。但因为不知道serv-u的加密算法,所以必须要将密码的类型设为“不加密”。如下图:
根据以上分析,实现在线实时开通ftp和web服务的过程可以分为2步来完成:
1、 建立用户主目录,该目录具有web浏览权限。
2、 往ini文件中添加用户。
二、准备工作
1、 安装iis(Internet 信息服务),建立两个web服务器,一个放申请、开通ftp服务的主程序,一个放个人主页。
2、 安装serv-u,密码的类型设为“不加密”。
三、核心代码
说明:
applypage.asp为申请页面;
变量Servpath为serv-u的安装目录;
变量homepath为放个人主页的web服务器主目录;
具体代码:
<%
Sub Createindex(Folder) 定义一个创建默认主页的子程序
ipf = Folder&"/index.htm"
Set indexfso = CreateObject("Scripting.FileSystemObject")
indextext="<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'><title>平阳职教中心学生虚拟主机系统</title></head>"
indextext = indextext&CHR(13)&CHR(10)&"<body style='font-size: 9pt'><br><br><br><hr color='#FF0000' width='80%' size='1'>"
indextext = indextext&CHR(13)&CHR(10)&"<p align='center'><b>系统默认主页顺序</b><br><br>"
indextext = indextext&CHR(13)&CHR(10)&"<br><br>1、default.htm<br><br>2、default.htm<br><br>3、index.asp<br><br>4、index.htm<br><br>"
indextext = indextext&CHR(13)&CHR(10)&"<br><br><br><br><hr color='#FF0000' width='80%' size='1'></body></html>"
Set ipf = indexfso.OpenTextFile(ipf,2,True)
ipf.WriteLine(indextext)
ipf.close
set ipf=nothing
set indexfso=nothing
End Sub
application("path")=Servpath&"ServUDaemon.ini"
application.lock
Set myfileobject=server.createobject("scripting.filesystemobject")
If NOT myfileobject.folderexists(homepath&username) then ‘检查用户目录是否已经存在。
myfileobject.createfolder(homepath&username) ‘创建用户目录
call Createindex(homepath&username) ‘调用子程序,创建默认主页
else
response.write"<SCRIPT language=JavaScript>alert('目录已经存在,无法创建该用户主目录!');"
response.write"window.location='applypage.asp';</SCRIPT>"
response.end
End If
%>
<% Dim fso, f1, ts, s, input(),item,counter,i,n,ii,username1,sp
Set fso=CreateObject("Scripting.FileSystemObject")
Set ts=fso.OpenTextFile(application("path"),1, False) ‘打开ini文件
counter = 0 ‘行数
i=0
n=0 ‘用户数初始值为0
do while not ts.AtEndOfStream
thisline = ts.readline
Redim preserve input(counter)
input(counter) = thisline
if LCase(left(input(counter),4))=LCase("user") then
sp=split(input(counter),"|")
username1=sp(0)
username1=right(username1,(len(username1)-instr((username1),"=")))
if LCase(username1)=LCase(username) then ‘判断用户名是否存在
Response.Write "用户名已经存在!"
Response.end
end if
if i=0 then
i=counter ‘记录“user=”在ini文件中的位置
end if
n=n+1 ‘统计用户数
end if
counter = counter + 1
loop
ts.Close
Set f1 = fso.CreateTextFile(application("path"), 1,False)
ii=0
for each item in input
if ii=(i+n) then
f1.WriteLine "user"&(n+1)&"="&username&"|1|0"
end if
f1.WriteLine item ‘将读出的
ii=ii+1
next
f1.WriteLine "[USER="&username&"|1]" ‘用户名
f1.WriteLine "Password="&userpass ‘密码
f1.WriteLine "HomeDir="&homepath&username ‘主目录路径
f1.WriteLine "RelPaths=1"
f1.WriteLine "AlwaysAllowLogin=1"
f1.WriteLine "ChangePassword=1"
f1.WriteLine "SpeedLimitUp=204800"
f1.WriteLine "SpeedLimitDown=204800"
f1.WriteLine "DiskQuota=1|20480000|0" ‘空间大小
f1.WriteLine "TimeOut=600"
f1.WriteLine "Access1="&homepath&username&"|RWAMLCDP" ‘目录读写权限
application.unlock 解除application锁定
Response.Redirect "page.asp" ‘发送成功页面
response.end
%>
建议将用户名和密码同时记入数据库,这样便于管理,而且如果学校的网站域名已经做了泛域名解析,用户就可以通过二级域名(如 http://username.pyzjzx.cn)来访问自己的个人主页。
四、程序界面
申请空间页面:
申请成功页面:
以上代码在win2000 server + serv-u4.0以上版本环境调试成功,程序下载地址:uploadfile/serv.rar 联系信箱: admin@pyjy.net
附:升级后的代码(主要是支持密码加密了)
-----------------------------
在线开通serv-u帐号asp代码使用说明:
-----------------------------
1、apply.htm为申请空间的页面。
2、config.inc为系统配置文件,请正确填写参数。
3、sub.asp为已经写好的子程序,调用方法:serviniadd(username,userpass),其中username为用户名,userpass为密码
4、sub.asp中还包括其他几个常用的函数,具体见程序注释
serv-u4.0以上版本环境调试成功,支持最新的6.0版本!
-----------------------------
我的建议:
-----------------------------
1、使用该程序给他人提供虚拟空间服务器请注意安全,最好不要给用户开放脚本权限!
2、如果用户很多(超过数百),请使用数据库来存放用户信息,我将提供类似的使用serv数据库插件或者直接使用serv的odbc功能的程序。
-----------------------------
程序编写:浙江平阳职教中心谢作如
程序下载地址: http://www.wzei.net/ReadNews.asp?NewsID=28
联系信箱: xzr@pyjy.net
顺便说一下,这几天我已经在整理直接使用odbc功能的serv的资料,需要这方面资料的老师请耐心等几天。
现在已经有很多学校以lan或adsl的方式接入Internet,并且购买了服务器,所以就具备了为教师、学生提供类似中国频道、中国万网提供的虚拟空间服务,即提供web和ftp服务,每个用户能够彼此独立地管理自己的空间。结合Windows2000的iis和serv-u4.0软件就可以很好的实现这一功能。但是serv-u4.0软件没有提供web管理页面,也不是用数据库来记录用户信息,如果一个一个地靠管理员手工输入用户信息,工作量可想而知。为此我参考了一些资料,写了一个asp程序,使它能够配合serv-u4.0软件,成功地实现了在线开通ftp和web服务。我校就用这一asp程序为计算机专业班级的学生开了20M的虚拟空间。
一、编程原理:
serv-u软件是使用ini文件来记录用户信息的。其信息和含义如下:
[GLOBAL] ‘存放系统信息,包括serv的注册信息
[DOMAINS] ‘存放域信息,如:
Domain1=0.0.0.0||21|Domain 1|1|0
[Domain1] ‘域domain1的用户信息,如:
Logging=1
LogIPNames=1
LogFileIPNames=1
User1=admin|1|0
Admin为该域的第一个用户
[USER=admin|1] ‘用户admin的配置信息
Password=admin888 ‘密码,默认状态下,serv使用加密密码
HomeDir=d:/homepage/llm ‘主目录
RelPaths=1
AlwaysAllowLogin=1
ChangePassword=1 ‘是否允许修改密码
DiskQuota=1|20480000|84786 ‘是否启用磁盘配额和磁盘空间大小以及已使用的空间大小
SpeedLimitUp=204800 ‘上传速度
SpeedLimitDown=204800 ‘下传速度
TimeOut=600 ‘空闲时间
Access1=d:/homepage/llm|RWAMLCDP ‘有管理权限的目录
了解ini文件的含义之后,我们只要在这个文件域用户信息和用户信息两处加入相应的信息,就能达到添加用户的目的。Asp的sfo(Scripting.FileSystemObject )组件提供了编辑文本文件的功能,利用这一组件还可以同时为新添加的用户创建文件夹,功能十分强大。但因为不知道serv-u的加密算法,所以必须要将密码的类型设为“不加密”。如下图:
根据以上分析,实现在线实时开通ftp和web服务的过程可以分为2步来完成:
1、 建立用户主目录,该目录具有web浏览权限。
2、 往ini文件中添加用户。
二、准备工作
1、 安装iis(Internet 信息服务),建立两个web服务器,一个放申请、开通ftp服务的主程序,一个放个人主页。
2、 安装serv-u,密码的类型设为“不加密”。
三、核心代码
说明:
applypage.asp为申请页面;
变量Servpath为serv-u的安装目录;
变量homepath为放个人主页的web服务器主目录;
具体代码:
<%
Sub Createindex(Folder) 定义一个创建默认主页的子程序
ipf = Folder&"/index.htm"
Set indexfso = CreateObject("Scripting.FileSystemObject")
indextext="<html><head><meta http-equiv='Content-Type' content='text/html; charset=gb2312'><title>平阳职教中心学生虚拟主机系统</title></head>"
indextext = indextext&CHR(13)&CHR(10)&"<body style='font-size: 9pt'><br><br><br><hr color='#FF0000' width='80%' size='1'>"
indextext = indextext&CHR(13)&CHR(10)&"<p align='center'><b>系统默认主页顺序</b><br><br>"
indextext = indextext&CHR(13)&CHR(10)&"<br><br>1、default.htm<br><br>2、default.htm<br><br>3、index.asp<br><br>4、index.htm<br><br>"
indextext = indextext&CHR(13)&CHR(10)&"<br><br><br><br><hr color='#FF0000' width='80%' size='1'></body></html>"
Set ipf = indexfso.OpenTextFile(ipf,2,True)
ipf.WriteLine(indextext)
ipf.close
set ipf=nothing
set indexfso=nothing
End Sub
application("path")=Servpath&"ServUDaemon.ini"
application.lock
Set myfileobject=server.createobject("scripting.filesystemobject")
If NOT myfileobject.folderexists(homepath&username) then ‘检查用户目录是否已经存在。
myfileobject.createfolder(homepath&username) ‘创建用户目录
call Createindex(homepath&username) ‘调用子程序,创建默认主页
else
response.write"<SCRIPT language=JavaScript>alert('目录已经存在,无法创建该用户主目录!');"
response.write"window.location='applypage.asp';</SCRIPT>"
response.end
End If
%>
<% Dim fso, f1, ts, s, input(),item,counter,i,n,ii,username1,sp
Set fso=CreateObject("Scripting.FileSystemObject")
Set ts=fso.OpenTextFile(application("path"),1, False) ‘打开ini文件
counter = 0 ‘行数
i=0
n=0 ‘用户数初始值为0
do while not ts.AtEndOfStream
thisline = ts.readline
Redim preserve input(counter)
input(counter) = thisline
if LCase(left(input(counter),4))=LCase("user") then
sp=split(input(counter),"|")
username1=sp(0)
username1=right(username1,(len(username1)-instr((username1),"=")))
if LCase(username1)=LCase(username) then ‘判断用户名是否存在
Response.Write "用户名已经存在!"
Response.end
end if
if i=0 then
i=counter ‘记录“user=”在ini文件中的位置
end if
n=n+1 ‘统计用户数
end if
counter = counter + 1
loop
ts.Close
Set f1 = fso.CreateTextFile(application("path"), 1,False)
ii=0
for each item in input
if ii=(i+n) then
f1.WriteLine "user"&(n+1)&"="&username&"|1|0"
end if
f1.WriteLine item ‘将读出的
ii=ii+1
next
f1.WriteLine "[USER="&username&"|1]" ‘用户名
f1.WriteLine "Password="&userpass ‘密码
f1.WriteLine "HomeDir="&homepath&username ‘主目录路径
f1.WriteLine "RelPaths=1"
f1.WriteLine "AlwaysAllowLogin=1"
f1.WriteLine "ChangePassword=1"
f1.WriteLine "SpeedLimitUp=204800"
f1.WriteLine "SpeedLimitDown=204800"
f1.WriteLine "DiskQuota=1|20480000|0" ‘空间大小
f1.WriteLine "TimeOut=600"
f1.WriteLine "Access1="&homepath&username&"|RWAMLCDP" ‘目录读写权限
application.unlock 解除application锁定
Response.Redirect "page.asp" ‘发送成功页面
response.end
%>
建议将用户名和密码同时记入数据库,这样便于管理,而且如果学校的网站域名已经做了泛域名解析,用户就可以通过二级域名(如 http://username.pyzjzx.cn)来访问自己的个人主页。
四、程序界面
申请空间页面:
申请成功页面:
以上代码在win2000 server + serv-u4.0以上版本环境调试成功,程序下载地址:uploadfile/serv.rar 联系信箱: admin@pyjy.net
附:升级后的代码(主要是支持密码加密了)
-----------------------------
在线开通serv-u帐号asp代码使用说明:
-----------------------------
1、apply.htm为申请空间的页面。
2、config.inc为系统配置文件,请正确填写参数。
3、sub.asp为已经写好的子程序,调用方法:serviniadd(username,userpass),其中username为用户名,userpass为密码
4、sub.asp中还包括其他几个常用的函数,具体见程序注释
serv-u4.0以上版本环境调试成功,支持最新的6.0版本!
-----------------------------
我的建议:
-----------------------------
1、使用该程序给他人提供虚拟空间服务器请注意安全,最好不要给用户开放脚本权限!
2、如果用户很多(超过数百),请使用数据库来存放用户信息,我将提供类似的使用serv数据库插件或者直接使用serv的odbc功能的程序。
-----------------------------
程序编写:浙江平阳职教中心谢作如
程序下载地址: http://www.wzei.net/ReadNews.asp?NewsID=28
联系信箱: xzr@pyjy.net