Iso标准日期函数:
Function IsoDate(str_date) Dim temp
If IsDate(str_date) Then
temp = Year(str_date)&"-"& Right("0"&Month(str_date),2) & "-"& Right("0" & Day(str_date),2)
Else
temp = str_date
End If
IsoDate=temp
End Function
备份函数的思路:
先将备份设置读取出到函数中的变量中,并且得到网站的服务器路径
检查备份主文件夹(例如:backup/)是否存在,当前备份文件夹(例如:backup/2006-05-30/)是否存在,然后将需要备份的文件保存到当前备份文件夹;
计算出备份文件的保存期,读取以前的备份日期列表,然后两者相比较,如果日期小于保存期则将备份文件删除,如果不需要删除则将日期转存到新变量中。
生成新的备份设置并将之写入原设置文件。
具体程序如下:
'==================================
' Function: 文件定时备份程序backup files
' Need var: root_dir , bak_set , isodate()
' Need file bak_set.asp
' return : true / false
'==================================
Function bak_start()
'1
Dim perfix
perfix = bak_set("perfix")
Dim files
files = split(bak_set("file_list"),"|")
Dim paths
paths = split(bak_set("file_path"),"|")
Dim now_date
now_date = isodate(date)
'response.Write(now_date)
Dim sev_root
sev_root = Server.MapPath(root_dir)
Dim bak_root
bak_root = sev_root & "" & bak_set("bak_dir")
Dim bak_dir
bak_dir = bak_root & "" & now_date & ""
'2 create backup
Dim fso
Set fso = Server.createobject("Scripting.FileSystemObject")
If Not fso.FolderExists(bak_root) Then fso.CreateFolder(bak_root)
If Not fso.FolderExists(bak_dir) Then fso.CreateFolder(bak_dir)
'response.Write(bak_dir)
If Ubound(files) > Ubound(paths) Then
bak_start = false
Exit Function
End If
Dim i
'On Error Resume Next
For i = 0 To Ubound(files)
'response.Write(sev_root & "" & paths(i) & files(i))
If fso.FileExists( sev_root & "" & paths(i) & files(i) ) And Not fso.FileExists(bak_dir & perfix & files(i)) Then
fso.CopyFile sev_root & "" & paths(i) & files(i) , bak_dir & perfix & files(i)
End If
Next
'3 Delete out of date backup
Dim date_out
date_out = isodate( date - Abs(bak_set("date_out")) )
'response.Write(date_out)
Dim dates
Dim bak_date
bak_date = ""
dates = split(bak_set("bak_date"),"|")
For i = 0 To Ubound(dates)
If dates(i) < date_out Then
'On Error Resume Next
If fso.FolderExists(bak_root & "" & dates(i)) Then fso.DeleteFolder bak_root & "" & dates(i)
Else
bak_date = bak_date & dates(i) & "|"
End If
Next
bak_date = bak_date & now_date
bak_set("bak_date") = bak_date
'4 update settings
Dim f
Set f = fso.OpenTextFile(Server.MapPath("bak_set.asp"),2,true)'2 写
Dim temp ,keys
temp = "<%" &vbCrlf & _
"Dim root_dir"&vbCrlf & _
"root_dir = """& root_dir &"""" &vbCrlf & _
"Dim bak_set" &vbCrlf & _
"Set bak_set = Server.createobject(""Scripting.Dictionary"")"&vbCrlf
keys = bak_set.Keys
For i = 0 to Ubound(keys)
temp = temp & "bak_set.Add """&keys(i)&""" , """ & bak_set(keys(i)) & """" & vbCrlf
Next
temp = temp & "%" & ">"
f.write temp
f.Close
Set fso = Nothing
Set f = Nothing
bak_start = true
End Function
最后,也是最重要的,那就是安全问题,如果备份的文件能被浏览器打开,那后果可能是很严重的!所以应当谨慎选取备份文件夹,如果服务器允许访问网站的外部目录,那么应当把备份的路径也指定到网站外部,例如:网站根目录解析到了 XXX/htdoc/ 而你对此也有读写权限 xxx/ 那么就可以将备份文件加指定到 xxx/backup/ 这样就比较安全。如果没有这样的权限,那么就必须保证,需要备份的文件本身就是安全的。