關於網站檔案自動備份程式的一點思考

來源:互聯網
上載者:User

摘要:
本文提供了一種使用asp php指令碼來實現網站檔案備份的思路,可以實現指定檔案的按天備份。
個人網站往往在虛擬機器主機上,對主機的控制許可權很小,因此不能使用諸如任務計劃來實現定時備份,我們需要換一種思路來實現相似的自動備份。
我們可以利用使用者對網站的訪問來實現對指定檔案的按天備份。
基本思路是:使用者訪問網站 → 讀取最後備份日期、讀取當前日期然後比較,如果這兩個日期不一致則調用備份程式來實現對指定檔案的備份,備份完成後再寫入新的日期標記,這時候使用者再訪問網站,日期已經是最新的了,就會跳過備份程式繼而執行其他程式。
分析這個思路:備份程式會在每天的第一個使用者訪問網站的時候啟動,便可以達到按天備份的效果,然而如果這天沒有使用者訪問則不會備份,這個並無多大關係,因為如果沒有使用者訪問網站,則網站內容不會發生很大改變。因此可以忽略這個情況。
需要注意的是,可能存在兩個人同時訪問網站,而同時啟動備份程式的情況,便可能會對備份內容造成覆蓋,對此我們可以在程式中添加判斷語句,如果檔案已經存在則不去覆蓋它。
如果是要備份的兩個檔案的檔案名稱也相同則也會造成覆蓋,我們假定檔案是全不相同的。
還有一個比較重要的問題是,在備份程式中必須採用的時期格式是 4位元年和2位元月、日,不足位元必須補零。 例如:2006-05-31隻有這樣才能實現日期大小的比較,在asp中我們可以用一個小程式來實現,在php中已經有這樣的日期格式了。
下面詳細說明程式的構造,以asp為例。
===bak_set.asp===

複製代碼 代碼如下:Dim root_dir
root_dir = "/"
Dim bak_set
Set bak_set = Server.createobject("Scripting.Dictionary")
bak_set.Add "last_bak" , "2006-05-30"
bak_set.Add "file_list" , "data.mdb|system.mdb"
bak_set.Add "file_path" , "database/|database/"
bak_set.Add "bak_dir" , "backup/"
bak_set.Add "bak_date" , "2006-05-27|2006-05-28|2006-05-29|2006-05-30"
bak_set.Add "perfix" , "@"
bak_set.Add "date_out" , "2"

以上是備份設定檔案,root_dir 是網站主目錄的路徑,是網站的一個全域設定,剩下的是備份設定,我們需要知道:要備份的檔案名稱、路徑,備份在什麼地方,備份保留幾天,備份檔案的檔案名稱首碼,兩個經常變化的設定是最後備份日期和備份過的日期的列表。在全部的路徑設定中都需要用“/”結束
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/ 這樣就比較安全。如果沒有這樣的許可權,那麼就必須保證,需要備份的檔案本身就是安全的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.