那天突然的一個靈感,是針對防盜鏈的
正常上傳的文件,若被人盜鏈則增加了自己服務器的負擔,上次164.cc就因此被掛
然後想想對策,目前各類防盜鏈程序也不少,不過使用也並不簡單,還有就是不能免費……
所以,只有自己先想辦法。那麼,現在看看標題,再想想防盜鏈,或許就有些眉目了
我可以不定時的修改上傳文件所在的文件夾名稱,而本站程序是動態獲得文件夾名稱,這樣原先盜用本站文件的站點會因路徑的錯誤而找不到文件,從而也就實現了防盜鏈。
那麼,如何使用FSO修改文件夾的名稱呢?
一個簡單的函數:
複製代碼代碼如下:
<%
Functionfldrename(nowfld,newfld)
nowfld=server.mappath(nowfld)
newfld=server.mappath(newfld)
Setfso=CreateObject("Scripting.FileSystemObject")
ifnotfso.FolderExists(nowfld)then
response.write("需要修改的文件夾路徑不正確或文件夾名稱輸入錯誤")
else
fso.CopyFoldernowfld,newfld
fso.DeleteFolder(nowfld)
endif
setfso=nothing
EndFunction
%>
總的來說就是拷貝當前文件夾的內容到新的文件夾中,然後再刪除該文件夾內容,從而間接達到文件夾改名的目的。
這是一個偏執狂問題,因為修改文件夾名稱,尤其是要修改名稱的該文件夾內容是G量時,這個等待的時間相對FTP遠程修改名稱就有點不划算了。
有人說FSO可不可以直接修改文件夾名稱呢?吾莫之。
應用該函數
<%callfldrename("ex01","ex02")%>
基本意思即將與程序執行文件在同一目錄下的ex01文件夾名稱修改為ex02
下面是我在本地的測試情況通報:
1,本程序不消耗程序執行時間
2,執行1G文件夾間接改名時間需要50秒左右,其實也就是服務器端的文件複製轉移時間
3,CPU消耗不算太高,30%左右
4,若在改名中間突然死機或掉電,則發生兩種情況:
a,新文件夾被建立初期(新文件夾並未建好),下次執行程序,會發生錯誤類型:MicrosoftVBScript運行時錯誤(0x800A003A)文件已存在,此時只能FTP刪除新文件夾再執行(嘗試使用FSO刪除新文件夾並未湊效)。
b,已經復制了部分文件,下次執行程序,自動覆蓋已復制的文件夾內容,原文件夾內容依然存在。只有在復製完畢後,才會將原文件夾及其文件刪除。
5,同時需要注意新文件夾的名稱,避免和已有文件夾名稱重名,當然也可用程序判斷