现在盛行虚拟主机建站,我也有个站,也算是个站长咯。当了近一年的站长,感到站程序每次晋级的时分较为费事:先去官方看公告,然后下载晋级包到本地,解压,FTP上传到虚拟主机。这些都是累人的体力活,加之自己又懒得很,所以想入非非的觉得要是程序能够主动晋级就好了。所以就想了想,写了本文,期望对WEB程序开发者有协助。这儿只针对ASP,由于我只会ASP:-(
先看看传统的win32程序的晋级进程(比方杀毒软件),它是依托软件的晋级程序经过络衔接到服务器剖析并下载晋级文件到本地。
WEB程序有点不一样,由于它是运转于WEB服务器。它最终是要把晋级服务器上的文件掩盖到WEB服务器,站长的电脑仅仅中转。假如直接把晋级服务器上的文件Copy到WEB服务器(而不经过站长中转)那就完成了主动晋级。
好在体系自带了一个Microsoft.XMLHTTP组件用于拜访WEB,在ASP中能够调用它来完成衔接晋级服务器下载晋级文件。
以下代码是运用Microsoft.XMLHTTP下载文件的比方:
以下为引证的内容:
<%
SetxPost=CreateObject(Microsoft.XMLHTTP)
xPost.OpenGET,:///test.exe,False
xPost.Send()
SetsGet=CreateObject(ADODB.Stream)
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFileServer.MapPap(update.exe),2
setsGet=noping
setsPOST=noping
response.Write(下载文件成功!
)
%>
上面代码便是把://xxx.org/test.exe保存到WEB服务器当时目录,至于Microsoft.XMLHTTP的更多用法仍是看看MSDN吧。
假如文件比较多,就会屡次调用Microsoft.XMLHTTP衔接络,就可能呈现某次衔接失利部分文件未能更新的状况,为了防止这种状况,最好是把一切文件打包为一个文件一次下载到WEB后再解包。
呵呵,这儿说的打包可不是RAR或许ZIP包,而是咱们自己界说。比方把一切文件拼接为一个,然后再依据特别的记号分隔。现在没这么费事咯,由于有个现成的方法,咱们运用拿来主义便是:把一切文件(二进制方式)及其途径信息放入Access数据库。
下面这个vbs文件(来自海洋顶端2006Plus)便是打包当时目录的一切文件的:
以下为引证的内容:
Dimn整站排名优化",ws,fsoX,pePap
Setws=CreateObject(WScript.Shell)
SetfsoX=CreateObject(Scripting.FileSystemObject)
pePap=ws.Exec(cmd/ccd).StdOut.ReadAll()&\
i=InStr(pePap,Chr(13))
pePap=Left(pePap,i-1)
n=len(pePap)
OnErrorResumeNext
addToMdb(pePap)
Wscript.Echo当时目录现已打包结束,根目录为当时目录
SubaddToMdb(pePap)
Dimrs,conn,stream,软文推行"connStr
Setrs=CreateObject(ADODB.RecordSet)
Setstream=CreateObject(ADODB.Stream)
Setconn=CreateObject(ADODB.Connection)
SetadoCatalog=CreateObject(ADOX.Catalog)
connStr=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Packet.mdb
adoCatalog.CreateconnStr
conn.OpenconnStr
conn.Execute(CreateTableFileData(IdintIDENTITY(0,1)PRIMARYKEYCLUSTERED,PText,fileContentImage))
stream.Open
stream.Type=1
rs.OpenFileData,conn,3,3
fsoTreeForMdbpePap,rs百度搜索引擎优化排名",stream
rs.Close
Conn.Close
stream.Close
Setrs=Noping
Setconn=Noping
Setstream=Noping
SetadoCatalog=Noping
EndSub
FunctionfsoTreeForMdb(pePap,rs,stream)
Dimi,item,peFolder,folders,files
sysFileList=$&WScript.ScriptName&$Packet.mdb$Packet.ldb$
SetpeFolder=fsoX.GetFolder(pePap)
Setfiles=peFolder.Files
Setfolders=peFolder.SubFolders
ForEachitemInfolders
fsoTreeForMdbitem.Pap,rs,stream
Next
ForEachitemInfiles
IfInStr(LCase(sysFileList),$&LCase(item.Name)&$)<=0Then
rs.AddNew
rs(P)=Mid(item.Pap,n+2)
stream.LoadFromFile(item.Pap)
rs(fileContent)=stream.Read()
rs.Update
EndIf
Next
Setfiles=Noping
Setfolders=Noping
SetpeFolder=Noping
EndFunction
以下是解包的ASP文件:
以下为引证的内容:
<%
SubUnPack()
str=Server.MapPap(.)&\
Setrs=CreateObject(ADODB.RecordSet)
Setstream=CreateObject(ADODB.Stream)
Setconn=CreateObject(ADODB.Connection)
SetoFso=CreateObject(Scripting.FileSystemObject)
connStr=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=&Server.MapPap(update.mdb)
conn.OpenconnStr
rs.OpenFileData,conn,1,1
stream.Open
stream.Type=1
DoUntilrs.Eof
peFolder=Left(rs(P),InStrRev(rs(P),\))
IfoFso.FolderExists(str&peFolder)=FalseThen
oFso.CreateFolder(str&peFolder)
EndIf
stream.SetEOS()
IfIsNull(rs(fileContent))=FalseThenstream.Writers(fileContent)
stream.SaveToFilestr&rs(P),2
rs.MoveNext
Loop
rs.Close
conn.Close
stream.Close
Setws=Noping
Setrs=Noping
Setstream=Noping
Setconn=Noping
SetoFso=Noping
EndSub
%>
有了以上代码就不难开发出自己的ASP晋级程序了,流程无外乎这样:判别是否需求晋级(Y)->下载晋级包->解开晋级包掩盖旧文件->删去晋级包->更新版别信息->OK
,
本文来自:软文推行蜓云ruanwen.tingclouds