我们都知道asp这一类的服务器端处理的程序,其好处之一就是只向客户端输出
标准的Html流。因此可以起到向客户隐藏细节的作用。也就是说当我们在浏览器中
键入asp程序的网址后只能看见标准的Html文件,而不能看见asp的内容。但有时,
例如在一个asp的教学站点,我们有必要显示asp文件的内容,或者你愿意将你的原
代码与人享,通过一个程序将代码显示出来。
下面是我编写的一个asp程序,view_code.asp,它提供两种提交方式:一种是用
表格提交,即你知道了该源文件的物理地址(类似于:c:\asp_source\test.asp的
形式)。一种是采用get方式提交(类似于:
点击此处查看原代码)。另外它还支持两种cgi脚本,一种是asp,一种是php。
代码段:
<%
on error resume next
'忽略程序执行中的错误,在程序的最后统一处理。
%>
<%
function rt_min(num1,num2)
'该子程序用于返回两数中不等于零的最小数。
if num1=0 and num2=0 then
rt_min=-1
elseif num1=0 then
rt_min=num2
elseif num2=0 then
rt_min=num1
elseif num1<num2 then
rt_min=num1
else
rt_min=num2
end if
end function
%>
<%
function line_check(strline,cgi_type)
'该子程序用于检查输入段中是否包含有"<%、%>、<script或dim cgi_flag
if cgi_type="php" then
cgi_flag="?"
else
cgi_flag="%"
end if
'定义的cgi_flag用于代表php和asp的不同标识符
line_check=0
itemp=0
ipos=instr(strline,"<"&cgi_flag)
if rt_min(ipos,itemp)=ipos then
itemp=ipos
line_check=1
end if
ipos=instr(strline,cgi_flag&">")
if rt_min(ipos,itemp)=ipos then
itemp=ipos
line_check=2
end if
ipos=instr(1,strline,"<"&"script",1)
if rt_min(ipos,itemp)=ipos then
itemp=ipos
line_check=3
end if
ipos=instr(1,strline,"<"&"/script",1)
if rt_min(ipos,itemp)=ipos then
itemp=ipos
line_check=4
end if
end function
%>
<%
sub printhtml(strline)
'该子过程用于打印不含有上述四种特殊标记的行
ispace=len(strline)-len(ltrim(strline))
i=1
while(mid(strline,i,1))=chr(9)
ispace=ispace+5
i=i+1
wend
'统计空白的数量
if ispace>0 then
for i=1 to ispace
response.write(" ")
next
end if
ipos=instr(strline,"<")
if ipos then
response.write(left(strline,ipos-1))
response.write("<")
'用<来替代<,使浏览器不解释<>中的标记
strline=right(strline,len(strline)-ipos)
call printhtml(strline)
'自调用,直到没有<的出现
else
response.write(strline)
end if
end sub
%>
<%
sub printline(strline,iflag,cgi_type)
'该自过程用于根据line_check的返回值分别处理
dim cgi_flag
if cgi_type="php" then
cgi_flag="?"
else
cgi_flag="%"
end if
select case iflag
case 0
call printhtml(strline)
case 1
ipos=instr(strline,"<"&cgi_flag)
call printhtml(left(strline,ipos-1))
response.write("")
response.write("<"&cgi_flag)
strline=right(strline,len(strline)-ipos-1)
call printline(strline,line_check(strline,cgi_type),cgi_type)
'自调用,直到没有四种特殊标记的出现
case 2
ipos=instr(strline,cgi_flag&">")
call printhtml(left(strline,ipos-1))
response.write(cgi_flag&">")
response.write("")
strline=right(strline,len(strline)-ipos-1)
call printline(strline,line_check(strline,cgi_type),cgi_type)
case 3
ipos=instr(1,strline,"<"&"script",1)
call printhtml(left(strline,ipos-1))
response.write("")
response.write("<"&"script")
strline=right(strline,len(strline)-ipos-6)
call printline(strline,line_check(strline.cgi_type),cgi_type)
case 4
ipos=instr(1,strline,"<"&" script="">",1)
call printhtml(left(strline,ipos-1))
response.write("lt;"&"/script"&">")
response.write(" ")
strline=right(strline,len(strline)-ipos-8)
call printline(strline,line_check(strline,cgi_type),cgi_type)
case else
response.write("error")
end select
end sub
%>
view cgi_code(.asp or .php)
请输入路径:
请选择类型:aspphp
<%
if vartype(request.servervariables("HTTP_REFERER")) then
'判断该页面是否是由其他的页面申请提交,若用户是直接在浏览器中输入地址
而来的,则HTTP_REFERER环境变量应该没有被初始化
if request.servervariables("REQUEST_METHOD")="POST" then
code_path=request.form("code_path")
cgi_type=request.form("cgi_type")
response.write("下面的代码来自表格的提交:"&"
")
response.write("路径为:"&code_path&"
")
elseif request.servervariables("REQUEST_METHOD")="GET" then
code_path=request.querystring("code_path")
cgi_type=request.querystring("cgi_type")
response.write("下面的代码来自"&code_path&"的提交:"&"
")
response.write("路径为:"&code_path&"
")
end if
'根据提交方式的不同显示不同的提示
set fileobject=server.createobject("Scripting.FileSystemObject")
if fileobject.fileexists(code_path) then
'检查要打开的文件是否存在
set stream=fileobject.opentextfile(code_path,1,false,0)
while not stream.atendofstream
stroutput=stream.readline
call printline(stroutput,line_check(stroutput,cgi_type),cgi_type)
'将该文件的每一行都分别交给printline来处理
response.write("
")
wend
set stream=nothing
else
response.write("不能打开文件"&"
")
end if
end if
%>
<%
'下面的代码为统一的错误处理段,它根据程序运行时产生的错误代码来分别处理
if err.number<>0 then
response.write("error"&"
")
response.write("错误代码:"&err.number&"
")
response.write("错误描述:"&err.description)
end if
%>
最后,我在给出一个引用该程序的测试页面
显示代码的测试页面
点击此处查看该页的源码
相关视频
相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
热门文章 360快剪辑怎么使用 36金山词霸如何屏幕取词百度收购PPS已敲定!3
最新文章
微信3.6.0测试版更新了微信支付漏洞会造成哪
360快剪辑怎么使用 360快剪辑软件使用方法介酷骑单车是什么 酷骑单车有什么用Apple pay与支付宝有什么区别 Apple pay与贝贝特卖是正品吗 贝贝特卖网可靠吗
人气排行 xp系统停止服务怎么办?xp系统升级win7系统方电脑闹钟怎么设置 win7电脑闹钟怎么设置office2013安装教程图解:手把手教你安装与qq影音闪退怎么办 QQ影音闪退解决方法VeryCD镜像网站逐个数,电驴资料库全集同步推是什么?同步推使用方法介绍QQ2012什么时候出 最新版下载EDiary——一款好用的电子日记本
查看所有0条评论>>