中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > Asp > 综合文章
一个显示原代码的asp程序
作者:未知 时间:2004-02-14 12:12 出处:eNet硅谷动力 责编:chinaitpower
              摘要:暂无
一个显示原代码的asp程序

 我们都知道asp这一类的服务器端处理的程序,其好处之一就是只向客户端输出标准的Html流。因此可以起到向客户隐藏细节的作用。也就是说当我们在浏览器中键入asp程序的网址后只能看见标准的Html文件,而不能看见asp的内容。但有时,例如在一个asp的教学站点,我们有必要显示asp文件的内容,或者你愿意将你的原代码与人享,通过一个程序将代码显示出来。

  下面是我编写的一个asp程序,view_code.asp,它提供两种提交方式:

  一种是用表格提交,即你知道了该源文件的物理地址(类似于:c:\asp_source\test.asp的形式)。
  一种是采用get方式提交(类似于:< a href="view_code.asp?code_path= < %=server.mappath(request.servervariables("PATH_INFO"))% >&cgi_type=asp" >

点击此处查看原代码< /a >)。另外它还支持两种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

rt_min=num1

else

rt_min=num2

end if

end function

% >




< %

function line_check(strline,cgi_type)

’该子程序用于检查输入段中是否包含有"< %、% >、< script >或< /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("< font color=#ff0000 >")

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("< /font >")

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("< font color=#00ff00 >")

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("< /font >")

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

% >



< html >

< head >

< title > view cgi_code(.asp or .php) < /title >

< /head >

< body >

< form action="view_code.asp" method="POST" >

请输入路径:< input type=text name="code_path" >

请选择类型:< select name="cgi_type" >

< option value="asp" >asp< /option >

< option value="php" >php< /option >

< /select >

< input type=submit >

< /form >

< hr >

< %

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("下面的代码来自表格的提交:"&"< br >")

response.write("路径为:"&code_path&"< br >")

elseif request.servervariables("REQUEST_METHOD")="GET" then

code_path=request.querystring("code_path")

cgi_type=request.querystring("cgi_type")

response.write("下面的代码来自"&code_path&"的提交:"&"< br >")

response.write("路径为:"&code_path&"< br >")

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("< br >")

wend

set stream=nothing

else

response.write("不能打开文件"&"< br >")

end if

end if

% >

< /body >

< /html >



< %

’下面的代码为统一的错误处理段,它根据程序运行时产生的错误代码来分别处理

if err.number< >0 then

response.write("error"&"< br >")

response.write("错误代码:"&err.number&"< br >")

response.write("错误描述:"&err.description)

end if

% >

最后,我在给出一个引用该程序的测试页面

< html >

< head >

< title >显示代码的测试页面< /title >

< /head >

< body >

< a href="view_code.asp?code_path=&cgi_type=asp" >点击此处查看该页的源码< /a >

< /body >

< /html >
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有