主頁 > 知識(shí)庫 > 關(guān)于網(wǎng)站文件自動(dòng)備份程序的一點(diǎn)思考

關(guān)于網(wǎng)站文件自動(dòng)備份程序的一點(diǎn)思考

熱門標(biāo)簽:沈陽三五防封電銷卡 成都ai外呼系統(tǒng)線路 廣東語音外呼系統(tǒng)公司 長(zhǎng)春公司外呼系統(tǒng)中心 鄭州智能外呼電銷機(jī)器人廠家 云南便宜外呼系統(tǒng)平臺(tái) 鄢陵學(xué)校如何做地圖標(biāo)注 虛擬電話外呼系統(tǒng) 沈陽電話機(jī)器人公司

摘要: 
本文提供了一種使用asp php腳本來實(shí)現(xiàn)網(wǎng)站文件備份的思路,可以實(shí)現(xiàn)指定文件的按天備份。 
個(gè)人網(wǎng)站往往在虛擬主機(jī)上,對(duì)主機(jī)的控制權(quán)限很小,因此不能使用諸如任務(wù)計(jì)劃來實(shí)現(xiàn)定時(shí)備份,我們需要換一種思路來實(shí)現(xiàn)相似的自動(dòng)備份。 
我們可以利用用戶對(duì)網(wǎng)站的訪問來實(shí)現(xiàn)對(duì)指定文件的按天備份。 
基本思路是:用戶訪問網(wǎng)站 → 讀取最后備份日期、讀取當(dāng)前日期然后比較,如果這兩個(gè)日期不一致則調(diào)用備份程序來實(shí)現(xiàn)對(duì)指定文件的備份,備份完成后再寫入新的日期標(biāo)記,這時(shí)候用戶再訪問網(wǎng)站,日期已經(jīng)是最新的了,就會(huì)跳過備份程序繼而執(zhí)行其他程序。 
分析這個(gè)思路:備份程序會(huì)在每天的第一個(gè)用戶訪問網(wǎng)站的時(shí)候啟動(dòng),便可以達(dá)到按天備份的效果,然而如果這天沒有用戶訪問則不會(huì)備份,這個(gè)并無多大關(guān)系,因?yàn)槿绻麤]有用戶訪問網(wǎng)站,則網(wǎng)站內(nèi)容不會(huì)發(fā)生很大改變。因此可以忽略這個(gè)情況。 
需要注意的是,可能存在兩個(gè)人同時(shí)訪問網(wǎng)站,而同時(shí)啟動(dòng)備份程序的情況,便可能會(huì)對(duì)備份內(nèi)容造成覆蓋,對(duì)此我們可以在程序中添加判斷語句,如果文件已經(jīng)存在則不去覆蓋它。 
如果是要備份的兩個(gè)文件的文件名也相同則也會(huì)造成覆蓋,我們假定文件是全不相同的。 
還有一個(gè)比較重要的問題是,在備份程序中必須采用的時(shí)期格式是    4位數(shù)年和2位數(shù)月、日,不足位數(shù)必須補(bǔ)零。  例如:2006-05-31只有這樣才能實(shí)現(xiàn)日期大小的比較,在asp中我們可以用一個(gè)小程序來實(shí)現(xiàn),在php中已經(jīng)有這樣的日期格式了。 
下面詳細(xì)說明程序的構(gòu)造,以asp為例。 
===bak_set.asp=== 

復(fù)制代碼 代碼如下:
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"  
以上是備份設(shè)置文件,root_dir 是網(wǎng)站主目錄的路徑,是網(wǎng)站的一個(gè)全局設(shè)置,剩下的是備份設(shè)置,我們需要知道:要備份的文件名、路徑,備份在什么地方,備份保留幾天,備份文件的文件名前綴,兩個(gè)經(jīng)常變化的設(shè)置是最后備份日期和備份過的日期的列表。在全部的路徑設(shè)置中都需要用“/”結(jié)束 
Iso標(biāo)準(zhǔn)日期函數(shù):  
復(fù)制代碼 代碼如下:
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 
 
備份函數(shù)的思路: 
先將備份設(shè)置讀取出到函數(shù)中的變量中,并且得到網(wǎng)站的服務(wù)器路徑  
檢查備份主文件夾(例如:backup/)是否存在,當(dāng)前備份文件夾(例如:backup/2006-05-30/)是否存在,然后將需要備份的文件保存到當(dāng)前備份文件夾;  
計(jì)算出備份文件的保存期,讀取以前的備份日期列表,然后兩者相比較,如果日期小于保存期則將備份文件刪除,如果不需要?jiǎng)h除則將日期轉(zhuǎn)存到新變量中。  
生成新的備份設(shè)置并將之寫入原設(shè)置文件。  
具體程序如下: 
復(fù)制代碼 代碼如下:
'==================================  
' Function: 文件定時(shí)備份程序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   
最后,也是最重要的,那就是安全問題,如果備份的文件能被瀏覽器打開,那后果可能是很嚴(yán)重的!所以應(yīng)當(dāng)謹(jǐn)慎選取備份文件夾,如果服務(wù)器允許訪問網(wǎng)站的外部目錄,那么應(yīng)當(dāng)把備份的路徑也指定到網(wǎng)站外部,例如:網(wǎng)站根目錄解析到了 XXX/htdoc/ 而你對(duì)此也有讀寫權(quán)限 xxx/ 那么就可以將備份文件加指定到 xxx/backup/ 這樣就比較安全。如果沒有這樣的權(quán)限,那么就必須保證,需要備份的文件本身就是安全的。 

標(biāo)簽:遼陽 平頂山 朝陽 孝感 防城港 馬鞍山 湖北 四平

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《關(guān)于網(wǎng)站文件自動(dòng)備份程序的一點(diǎn)思考》,本文關(guān)鍵詞  關(guān)于,網(wǎng)站,文件,自動(dòng),備份,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《關(guān)于網(wǎng)站文件自動(dòng)備份程序的一點(diǎn)思考》相關(guān)的同類信息!
  • 本頁收集關(guān)于關(guān)于網(wǎng)站文件自動(dòng)備份程序的一點(diǎn)思考的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章