使用FSO修改文件夹的名称实现文件转移防盗链
程序员文章站
2022-05-28 16:19:34
那天突然的一个灵感,是针对防盗链的 正常上传的文件,若被人盗链则增加了自己服务器的负担,上次164.cc就因此被挂 然后想想对策,目前各类防盗链程序也不少,不过使用也并不简...
那天突然的一个灵感,是针对防盗链的
正常上传的文件,若被人盗链则增加了自己服务器的负担,上次164.cc就因此被挂
然后想想对策,目前各类防盗链程序也不少,不过使用也并不简单,还有就是不能免费……
所以,只有自己先想办法。那么,现在看看标题,再想想防盗链,或许就有些眉目了
我可以不定时的修改上传文件所在的文件夹名称,而本站程序是动态获得文件夹名称,这样原先盗用本站文件的站点会因路径的错误而找不到文件,从而也就实现了防盗链。
那么,如何使用fso修改文件夹的名称呢?
一个简单的函数:
<%
function fldrename(nowfld,newfld)
nowfld=server.mappath(nowfld)
newfld=server.mappath(newfld)
set fso = createobject("scripting.filesystemobject")
if not fso.folderexists(nowfld) then
response.write("需要修改的文件夹路径不正确或文件夹名称输入错误")
else
fso.copyfolder nowfld,newfld
fso.deletefolder(nowfld)
end if
set fso=nothing
end function
%>
总的来说就是拷贝当前文件夹的内容到新的文件夹中,然后再删除该文件夹内容,从而间接达到文件夹改名的目的。
这是一个偏执狂问题,因为修改文件夹名称,尤其是要修改名称的该文件夹内容是g量时,这个等待的时间相对ftp远程修改名称就有点不划算了。
有人说fso可不可以直接修改文件夹名称呢?吾莫之。
应用该函数
<%call fldrename("ex01","ex02")%>
基本意思即将与程序执行文件在同一目录下的 ex01 文件夹名称修改为 ex02
下面是我在本地的测试情况通报:
1,本程序不消耗程序执行时间
2,执行1g文件夹间接改名时间需要50秒左右,其实也就是服务器端的文件复制转移时间
3,cpu消耗不算太高,30%左右
4,若在改名中间突然死机或掉电,则发生两种情况:
a,新文件夹被建立初期(新文件夹并未建好),下次执行程序,会发生 错误类型:microsoft vbscript 运行时错误 (0x800a003a)文件已存在,此时只能ftp删除新文件夹再执行(尝试使用fso删除新文件夹并未凑效)。
b,已经复制了部分文件,下次执行程序,自动覆盖已复制的文件夹内容,原文件夹内容依然存在。只有在复制完毕后,才会将原文件夹及其文件删除。
5,同时需要注意新文件夹的名称,避免和已有文件夹名称重名,当然也可用程序判断
<%
function fldrename(nowfld,newfld)
nowfld=server.mappath(nowfld)
newfld=server.mappath(newfld)
set fso = createobject("scripting.filesystemobject")
if not fso.folderexists(nowfld) then
response.write("需要修改的文件夹路径不正确或文件夹名称输入错误")
else
if fso.folderexists(newfld) then
response.write("您命名的新文件夹名称已经存在")
else
fso.copyfolder nowfld,newfld
fso.deletefolder(nowfld)
end if
end if
set fso=nothing
end function
%>
6,若在修改文件夹名称的同时,文件夹内有数据库相关操作、音乐文件正在被播放,则显示为microsoft vbscript 运行时错误 (0x800a0046)没有权限,主要即是删除原有文件夹出现的问题(音乐文件已被删除、但文件夹未能被删除)。只有ftp登录处理了。若本文件夹为全图片文件则可以运行成功。
正常上传的文件,若被人盗链则增加了自己服务器的负担,上次164.cc就因此被挂
然后想想对策,目前各类防盗链程序也不少,不过使用也并不简单,还有就是不能免费……
所以,只有自己先想办法。那么,现在看看标题,再想想防盗链,或许就有些眉目了
我可以不定时的修改上传文件所在的文件夹名称,而本站程序是动态获得文件夹名称,这样原先盗用本站文件的站点会因路径的错误而找不到文件,从而也就实现了防盗链。
那么,如何使用fso修改文件夹的名称呢?
一个简单的函数:
复制代码 代码如下:
<%
function fldrename(nowfld,newfld)
nowfld=server.mappath(nowfld)
newfld=server.mappath(newfld)
set fso = createobject("scripting.filesystemobject")
if not fso.folderexists(nowfld) then
response.write("需要修改的文件夹路径不正确或文件夹名称输入错误")
else
fso.copyfolder nowfld,newfld
fso.deletefolder(nowfld)
end if
set fso=nothing
end function
%>
总的来说就是拷贝当前文件夹的内容到新的文件夹中,然后再删除该文件夹内容,从而间接达到文件夹改名的目的。
这是一个偏执狂问题,因为修改文件夹名称,尤其是要修改名称的该文件夹内容是g量时,这个等待的时间相对ftp远程修改名称就有点不划算了。
有人说fso可不可以直接修改文件夹名称呢?吾莫之。
应用该函数
<%call fldrename("ex01","ex02")%>
基本意思即将与程序执行文件在同一目录下的 ex01 文件夹名称修改为 ex02
下面是我在本地的测试情况通报:
1,本程序不消耗程序执行时间
2,执行1g文件夹间接改名时间需要50秒左右,其实也就是服务器端的文件复制转移时间
3,cpu消耗不算太高,30%左右
4,若在改名中间突然死机或掉电,则发生两种情况:
a,新文件夹被建立初期(新文件夹并未建好),下次执行程序,会发生 错误类型:microsoft vbscript 运行时错误 (0x800a003a)文件已存在,此时只能ftp删除新文件夹再执行(尝试使用fso删除新文件夹并未凑效)。
b,已经复制了部分文件,下次执行程序,自动覆盖已复制的文件夹内容,原文件夹内容依然存在。只有在复制完毕后,才会将原文件夹及其文件删除。
5,同时需要注意新文件夹的名称,避免和已有文件夹名称重名,当然也可用程序判断
复制代码 代码如下:
<%
function fldrename(nowfld,newfld)
nowfld=server.mappath(nowfld)
newfld=server.mappath(newfld)
set fso = createobject("scripting.filesystemobject")
if not fso.folderexists(nowfld) then
response.write("需要修改的文件夹路径不正确或文件夹名称输入错误")
else
if fso.folderexists(newfld) then
response.write("您命名的新文件夹名称已经存在")
else
fso.copyfolder nowfld,newfld
fso.deletefolder(nowfld)
end if
end if
set fso=nothing
end function
%>
6,若在修改文件夹名称的同时,文件夹内有数据库相关操作、音乐文件正在被播放,则显示为microsoft vbscript 运行时错误 (0x800a0046)没有权限,主要即是删除原有文件夹出现的问题(音乐文件已被删除、但文件夹未能被删除)。只有ftp登录处理了。若本文件夹为全图片文件则可以运行成功。