我目前处于这样一种情况:我必须使用IIS上的服务器端JScript对使用经典ASP编写的应用程序进行一些补充。
我需要做的补充包括在服务器端代码中添加一系列包含以扩展应用程序的功能。但是,在所有情况下,服务器上可能都不存在inc文件,因此如果文件不存在,我需要应用程序回退到现有行为(忽略包含),而不是生成错误。
我知道由于SSI的工作方式,使用JScript代码中的if语句无法实现这一点,并且没有遇到动态包含服务器端代码的任何方法,其中文件可能不存在
有没有人知道在经典ASP中实现这一目标的方法?任何帮助将不胜感激。
答案 0 :(得分:2)
如果你真的很勇敢,你可以阅读文件的内容然后Eval()。 但如果包含的代码中出现任何问题,您将无法真正指示行号。
作为一种可能更好的选择:你不能在global.asa中创建一些健全性检查代码,如果它们不存在就将包含文件创建为空白吗?
答案 1 :(得分:2)
这是一个动态包含asp文件的脚本:
<%
' **** Dynamic ASP include v.2
function fixInclude(content)
out=""
if instr(content,"#include ")>0 then
response.write "Error: include directive not permitted!"
response.end
end if
content=replace(content,"<"&"%=","<"&"%response.write ")
pos1=instr(content,"<%")
pos2=instr(content,"%"& ">")
if pos1>0 then
before= mid(content,1,pos1-1)
before=replace(before,"""","""""")
before=replace(before,vbcrlf,""""&vbcrlf&"response.write vbcrlf&""")
before=vbcrlf & "response.write """ & before & """" &vbcrlf
middle= mid(content,pos1+2,(pos2-pos1-2))
after=mid(content,pos2+2,len(content))
out=before & middle & fixInclude(after)
else
content=replace(content,"""","""""")
content=replace(content,vbcrlf,""""&vbcrlf&"response.write vbcrlf&""")
out=vbcrlf & "response.write """ & content &""""
end if
fixInclude=out
end function
Function getMappedFileAsString(byVal strFilename)
Dim fso,td
Set fso = Server.CreateObject("Scripting.FilesystemObject")
Set ts = fso.OpenTextFile(Server.MapPath(strFilename), 1)
getMappedFileAsString = ts.ReadAll
ts.close
Set ts = nothing
Set fso = Nothing
End Function
execute (fixInclude(getMappedFileAsString("included.asp")))
%>
最后一行(以“execute”开头的那一行)相当于“include”指令,不同之处在于它可以包含在“if”语句中(动态包含)。
再见
答案 2 :(得分:0)
简单地说,不。为什么文件不存在?你能不能至少有空文件吗?
答案 3 :(得分:0)
你能做的是这样的事情:
唯一的问题是文件无法共享正常的程序范围变量。
答案 4 :(得分:0)
对此的解决方案原来是使用thomask的建议来包含文件并根据http://www.aspmessageboard.com/showthread.php?t=229532设置一个引用“me”的会话变量,以允许我访问常规程序范围变量
(因为这个原因我注册了,但似乎无法将我的注册帐户与我未注册的帐户相关联)