当前位置: 首页 > 图文教程 > 网络编程 > ASP > 分享一个好东东,动态Include文件 (Dynamic File Includes)

ASP
ASP采集入库生成本地文件的几个函数
百度小偷
使用ASP在IIS创建WEB站点的函数
简单过滤一下广告的代码
以前写的一个分页存储过程,刚才不小心翻出来的
用XMLHTTP来偷东西哈!
XMLHTTP利用POST发送表单时提交中文的问题
动态CSS,换肤技术
一段几乎可以让你死机的JS代码
ASP充分利用Err.Description
ASP小偷(远程数据获取)程序入门教程
一段采集程序代码
浅谈自动采集程序及入库
在ASP中调用存储过程的几种方法
使用类,实现模块化
使用模板实现ASP代码与页面分离
一个ASP小马
如何限制同一用户名同时登陆
ASP制作在线人数统计实例
在线统计代码 application

ASP 中的 分享一个好东东,动态Include文件 (Dynamic File Includes)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 138 ::
收藏到网摘: n/a

相信很多ASP开发者都会抱怨ASP的Include方式太老土了,以的方式加载文件实在是太不舒服了,在实际项目中不管我是不是一开始就要用到这个文件,我总得早早的把它Include进来...这方面PHP就舒服很多...什么时候用,什么时候In... 早在03年就在蓝色理想上看到过动态Include的文章,当时已经觉得很厉害,但实际应用了一下,不方便而且Include的效果不好.
后来又在一网站上看到了改进版的,但是也不太好用~~~
哎,当时我真是觉得有点想放弃ASP了,但是由于公司还是用ASP来开发,我也是没有办法...
今天,我一定要记住今天~~~在国外的一个网站上我竟然发现了这样一个好东东,太棒了~~~Great works!!!
以前试的一些动态Include代码,都无法Include一个类,甚至函数~~~又或者Include文件中的Include无法被包含...
现在这个鬼佬(dselkirk)写的类可以为我们做到这些了~~~
复制代码 代码如下:

<%
public include, include_vars
set include = new cls_include
class cls_include
private sub class_initialize()
set include_vars = server.createobject("scripting.dictionary")
end sub
private sub class_deactivate()
arr_variables.removeall
set include_vars = nothing
set include = nothing
end sub
public default function include(byval str_path)
dim str_source
if str_path <> "" then
str_source = readfile(str_path)
if str_source <> "" then
processincludes str_source
convert2code str_source
formatcode str_source
if str_source <> "" then
if request.querystring("debug") = 1 then
response.write str_source
response.end
else
executeglobal str_source
include_vars.removeall
end if
end if
end if
end if
end function
private sub convert2code(str_source)
dim i, str_temp, arr_temp, int_len
if str_source <> "" then
if instr(str_source,"%" & ">") > instr(str_source,"<" & "%") then
str_temp = replace(str_source,"<" & "%","|%")
str_temp = replace(str_temp,"%" & ">","|")
if left(str_temp,1) = "|" then str_temp = right(str_temp,len(str_temp) - 1)
if right(str_temp,1) = "|" then str_temp = left(str_temp,len(str_temp) - 1)
arr_temp = split(str_temp,"|")
int_len = ubound(arr_temp)
if (int_len + 1) > 0 then
for i = 0 to int_len
str_temp = trim(arr_temp(i))
str_temp = replace(str_temp,vbcrlf & vbcrlf,vbcrlf)
if left(str_temp,2) = vbcrlf then str_temp = right(str_temp,len(str_temp) - 2)
if right(str_temp,2) = vbcrlf then str_temp = left(str_temp,len(str_temp) - 2)
if left(str_temp,1) = "%" then
str_temp = right(str_temp,len(str_temp) - 1)
if left(str_temp,1) = "=" then
str_temp = right(str_temp,len(str_temp) - 1)
str_temp = "response.write " & str_temp
end if
else
if str_temp <> "" then
include_vars.add i, str_temp
str_temp = "response.write include_vars.item(" & i & ")"
end if
end if
str_temp = replace(str_temp,chr(34) & chr(34) & " & ","")
str_temp = replace(str_temp," & " & chr(34) & chr(34),"")
if right(str_temp,2) <> vbcrlf then str_temp = str_temp
arr_temp(i) = str_temp
next
str_source = join(arr_temp,vbcrlf)
end if
else
if str_source <> "" then
include_vars.add "var", str_source
str_source = "response.write include_vars.item(""var"")"
end if
end if
end if
end sub
private sub processincludes(str_source)
dim int_start, str_path, str_mid, str_temp
str_source = replace(str_source,"<!-- #","<!--#")
int_start = instr(str_source,"<!--#include")
str_mid = lcase(getbetween(str_source,"<!--#include","-->"))
do until int_start = 0
str_mid = lcase(getbetween(str_source,"<!--","-->"))
int_start = instr(str_mid,"#include")
if int_start > 0 then
str_temp = lcase(getbetween(str_mid,chr(34),chr(34)))
str_temp = trim(str_temp)
str_path = readfile(str_temp)
str_source = replace(str_source,"<!--" & str_mid & "-->",str_path & vbcrlf)
end if
int_start = instr(str_source,"#include")
loop
end sub
private sub formatcode(str_code)
dim i, arr_temp, int_len
str_code = replace(str_code,vbcrlf & vbcrlf,vbcrlf)
if left(str_code,2) = vbcrlf then str_code = right(str_code,len(str_code) - 2)
str_code = trim(str_code)
if instr(str_code,vbcrlf) > 0 then
arr_temp = split(str_code,vbcrlf)
for i = 0 to ubound(arr_temp)
arr_temp(i) = ltrim(arr_temp(i))
if arr_temp(i) <> "" then arr_temp(i) = arr_temp(i) & vbcrlf
next
str_code = join(arr_temp,"")
arr_temp = vbnull
end if
end sub
private function readfile(str_path)
dim objfso, objfile
if str_path <> "" then
if instr(str_path,":") = 0 then str_path = server.mappath(str_path)
set objfso = server.createobject("scripting.filesystemobject")
if objfso.fileexists(str_path) then
set objfile = objfso.opentextfile(str_path, 1, false)
if err.number = 0 then
readfile = objfile.readall
objfile.close
end if
set objfile = nothing
end if
set objfso = nothing
end if
end function
private function getbetween(strdata, strstart, strend)
dim lngstart, lngend
lngstart = instr(strdata, strstart) + len(strstart)
if (lngstart <> 0) then
lngend = instr(lngstart, strdata, strend)
if (lngend <> 0) then
getbetween = mid(strdata, lngstart, lngend - lngstart)
end if
end if
end function
end class
%>