明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

一個顯示原代碼的asp程序

[摘要]我們都知道asp這一類的服務(wù)器端處理的程序,其好處之一就是只向客戶端輸出 標(biāo)準(zhǔn)的Html流。因此可以起到向客戶隱藏細(xì)節(jié)的作用。也就是說當(dāng)我們在瀏覽器中 鍵入asp程序的網(wǎng)址后只能看見標(biāo)準(zhǔn)的Html文件,而不能看見asp的內(nèi)容。但有時, 例如在一個asp的教學(xué)站點(diǎn),我們有必要顯示asp文件的內(nèi)容,或...

我們都知道asp這一類的服務(wù)器端處理的程序,其好處之一就是只向客戶端輸出
標(biāo)準(zhǔn)的Html流。因此可以起到向客戶隱藏細(xì)節(jié)的作用。也就是說當(dāng)我們在瀏覽器中
鍵入asp程序的網(wǎng)址后只能看見標(biāo)準(zhǔn)的Html文件,而不能看見asp的內(nèi)容。但有時,
例如在一個asp的教學(xué)站點(diǎn),我們有必要顯示asp文件的內(nèi)容,或者你愿意將你的原
代碼與人享,通過一個程序?qū)⒋a顯示出來。
下面是我編寫的一個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">
點(diǎn)擊此處查看原代碼</a>)。另外它還支持兩種cgi腳本,一種是asp,一種是php。

代碼段:
<%
on error resume next
'忽略程序執(zhí)行中的錯誤,在程序的最后統(tǒng)一處理。
%>
<%
function rt_min(num1,num2)
'該子程序用于返回兩數(shù)中不等于零的最小數(shù)。
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或</script的特殊字符
dim cgi_flag
if cgi_type="php" then
cgi_flag="?"
else
cgi_flag="%"
end if
'定義的cgi_flag用于代表php和asp的不同標(biāo)識符
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)
'該子過程用于打印不含有上述四種特殊標(biāo)記的行
ispace=len(strline)-len(ltrim(strline))
i=1
while(mid(strline,i,1))=chr(9)
ispace=ispace+5
i=i+1
wend
'統(tǒng)計空白的數(shù)量
if ispace>0 then
for i=1 to ispace
response.write("&nbsp;")
next
end if
ipos=instr(strline,"<")
if ipos then
response.write(left(strline,ipos-1))
response.write("&lt;")
'用&lt;來替代<,使瀏覽器不解釋<>中的標(biāo)記
strline=right(strline,len(strline)-ipos)
call printhtml(strline)
'自調(diào)用,直到?jīng)]有<的出現(xiàn)
else
response.write(strline)
end if
end sub
%>
<%
sub printline(strline,iflag,cgi_type)
'該自過程用于根據(jù)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("&lt;"&cgi_flag)
strline=right(strline,len(strline)-ipos-1)
call printline(strline,line_check(strline,cgi_type),cgi_type)
'自調(diào)用,直到?jīng)]有四種特殊標(biāo)記的出現(xiàn)
case 2
ipos=instr(strline,cgi_flag&">")
call printhtml(left(strline,ipos-1))
response.write(cgi_flag&"&gt;")
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("&lt;"&"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"&"&gt;")
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
'判斷該頁面是否是由其他的頁面申請?zhí)峤,若用戶是直接在瀏覽器中輸入地址
而來的,則HTTP_REFERER環(huán)境變量應(yīng)該沒有被初始化
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
'根據(jù)提交方式的不同顯示不同的提示
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>
<%
'下面的代碼為統(tǒng)一的錯誤處理段,它根據(jù)程序運(yùn)行時產(chǎn)生的錯誤代碼來分別處理
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=<%=server.mappath(request.servervariables
("PATH_INFO"))%>&cgi_type=asp">點(diǎn)擊此處查看該頁的源碼</a>
</body>
</html>(出處:熱點(diǎn)網(wǎng)絡(luò))


相關(guān)文章