ASP 동적 포함 파일

7523 단어 동태include
항상 이런 요구가 있습니다. 서로 다른 수요에 따라include의 서로 다른 파일, 예를 들어 각 개인의 설정이 다르기 때문에 동적include 파일이 매크로 제한
이 파일이 존재하고 미리 컴파일되어야 합니다 (전면에 조건이 있든 없든).
항상 이런 요구가 있습니다. 수요에 따라 include가 다른 파일을 요구합니다.
개인별로 설정이 다르기 때문에 동적 include 파일을 요구합니다.
코드는 다음과 같습니다.

Function include(filename)
 Dim re,content,fso,f,aspStart,aspEnd
 
 set fso=CreateObject("Scripting.FileSystemObject")
 set f=fso.OpenTextFile(server.mappath(filename))
 content=f.ReadAll
 f.close
 set f=nothing
 set fso=nothing
 
 set re=new RegExp
 re.pattern="^\s*="
 aspEnd=1
 aspStart=inStr(aspEnd,content,"<%")+2
 do while aspStart>aspEnd+1 
 Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
 aspEnd=inStr(aspStart,content,"%\>")+2
 Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
 aspStart=inStr(aspEnd,content,"<%")+2
 loop
 Response.write Mid(content,aspEnd) 
 set re=nothing
End Function
사용 사례:
include("youinc.asp")

ASP는 동적으로 파일 포함 가능


<% 
'  
Dim Province 
Province = Request.form("Province") 
'  
%> 
<!--#include virtual="/ Province/<%= Province%>"--> 
당신은 위의 코드가 작동할 수 있다고 생각합니까?아니!간단하게 ASP를 사용하여 동적 포함에 도달하면 원하는 효과에 도달할 수 없습니다.왜?왜냐하면: Include 명령은 ASP 코드보다 먼저 실행되기 때문에 위의 코드는 작가의 뜻에 따라 사용자가 있는 성을 먼저 얻고 이 성의 정보를 포함하지 않습니다!
만약 동적 포함이 필요하다면, 당신은 이렇게 할 수 있다.

<%
Select Case Province
Case 1: %>
<!--#include file="1.asp"
<% Case 2: %>
<!--#include file="2.asp"
<% Case 3: %>
<!--#include file="3.asp"
<% End Select %>
이 코드는 네가 원하는 결과를 얻을 수 있다고 말해야 한다.그러나 사용자가 33개 성에서 왔을 수도 있기 때문에 33개의 파일을 포함하고 있습니까?특히 SSInc.dll은 당신이 도대체 어떤 파일을 포함해야 하는지 알 수 없습니다. (사실, 이때 Province는 아직 값이 없습니다.) 그래서 그녀는 모든 파일을 포함했습니다!너는 이때의 서류가 얼마나 큰지 상상할 수 있다.그리고 ASP.DLL은 이 파일의 ASP 코드를 스캔하여 실행합니다!
따라서 이럴 때마다 데이터베이스나 File System Object 같은 다른 사고방식을 고려해야 한다.

어떻게 동적으로 파일을 포함합니까?


해답
ASP 프로그래머가 직면하는 가장 큰 과제 중 하나는 동적 Include 파일입니다.#include는 ASP 코드가 실행되기 전에 처리하기 때문에 if/else의 머리를 쓰는 것은 불가능해 보입니다.
정말 그런가?
Include를 사용하는 목적과 Include를 사용하는 파일 수에 따라if/else를 사용하면 문제를 해결할 수 있습니다.그러나 이것은 절대로 언제든지 효과가 있을 수 있는 것이 아니라, 효과적인 해결 방법도 아니다. 왜냐하면 너는 많은 수공 작업을 해야 하기 때문이다.
두 개의 샘플 HTM 파일이 있다고 가정합니다. 1.htm와 2.htm, 간략화를 위해 가설 파일의 내용은 다음과 같다.

This is 1.htm

This is 2.htm
이제 동적 Include를 사용해 보겠습니다.

<% 
if request.querystring('param')='2' then 
%> 
<!--#include file='2.htm'--> 
<% 
else 
%> 
<!--#include file='1.htm'--> 
<% 
end if 
%>
주의: 위의 두 개의 #include는 실제로 모두 처리되었습니다.너는 실제적으로 운행해서 효과를 볼 수 있다.http://localhost/Test.asp?param=1
http://localhost/Test.asp?param=2
http://localhost/Test.asp
위에서 우리는querystring을 조건으로 한다.너는 시간, 날짜, 브라우저 버전 등을 조건으로 삼을 수도 있다.그러나 조건이 복잡할수록 이런 방법의 효율은 떨어진다.다음은 또 다른 사고방식을 제공합니다.

<% 
if request('param')='2' then 
filespec = '2.htm' 
else 
filespec = '1.htm' 
end if 
filespec = server.mapPath(filespec) 
scr = 'scripting.fileSystemObject'
set fs = server.createobject(scr) 
set f = fs.openTextFile(filespec) 
content = f.readall 
set f = nothing 
set fs = nothing 
response.write(content) 
%>
IIS5.0/ASP3.0에서는 동적 포함을 지원하는 두 가지 새로운 방법이 있습니다.
<%
server.transfer filename
server.execute filename
%>
만약 IIS5.0과 ASP3.0을 사용하기에 적합하다면, Ok!그러나 IIS5.0은 Windows 2000에서 실행되어야 합니다.

Asp 포함 파일 include 동적 포함 방법(변수 포함)


프로그램 설계가 필요하기 때문에 asp의include에 파일을 포함하여 동적 파일을 호출해야 하는 경우가 많습니다.예: 그중 1은 동적 매개 변수입니다. request에서 가져와야 합니다.그러나 안타깝게도include 문장에는 변수가 포함되어 있지 않습니다. 그렇지 않으면 파일 오류를 찾을 수 없습니다.본고는 이 문제를 해결하는 세 가지 방법을 제공할 것이다.
우선, 우리는 파일에 대한 알림과 경고 정보를 포함해야 한다. 포함된 파일은 다른 파일을 포함할 수 있다."#include"명령이 순환하지 않는 한asp 파일도 같은 파일을 여러 번 포함할 수 있습니다.예를 들어, First 파일의 경우asp는 파일을 포함합니다.inc, 그러면 Second.inc는 First를 거꾸로 포함할 수 없습니다.asp.파일도 그 자체를 포함할 수 없습니다.ASP는 이러한 순환 또는 중첩 오류를 감지하여 오류 메시지를 생성하고 요청 처리를 중지합니다.asp 파일.
해결 방법 1: FSO 호출 방법
ASP 언어는 강력하고 사용하기 쉬운 언어입니다. 우리는 자신의 사고방식을 한 구석에 고정시키지 마십시오. "큰 길은 로마로 통한다"는 사고방식은 통하지 않습니다. 사고방식을 바꾸십시오.
이 방법은 변통적인 방법을 채택하여 같은 포함 기능을 실현한다.FSO 호출입니다.코드는 다음과 같습니다.

<%
Function getFileContents(strIncludeFile) ' : 
Dim objFSO,objText,strPage
Set objFSO = Server.CreateObject("Scripting.FileSystemObject") ' FSO 
Set objText = objFSO.OpenTextFile(Server.MapPath(strIncludeFile))
getFileContents = objText.ReadAll
objText.Close
Set objText = Nothing
Set objFSO = Nothing
End Function
dim p
p=request("p") '2 :request.form ,request.querystring
response.write getFileContents("map"&p&".asp")
%>
이렇게 하면 fso 함수를 이용하여 파일을 포함하는 내용을 읽고response를 사용합니다.write는 파일을 포함하는 내용 출력, 즉include 명령과 같은 기능을 실현하여 맵1과 같은 자유 출력을 쉽게 실현합니다.asp,map2.asp... 파일 내용 기다렸어요.
해결 방법 2: if...elseif...
이 방법은 포함할 파일 수가 많지 않은 상황에서도 게으름뱅이 + 멍청이 방법입니다. 하하.코드는 다음과 같습니다.

<%if a=1 then%>
<!--#include file="map1.asp"-->
<%elseif a=2 then%>
<!--#include file="map2.asp"-->
<%elseif a=3 then%>
<!--#include file="map3.asp"-->
<%end if%>
해결 방법 3:select case
방법은 두 번째와 차이가 많지 않으니 좀 낫다.코드는 다음과 같습니다.

<%select case p
case 1%>
<!--#include virtual='inc/****1.asp'-->
<%case 2%>
<!--#include virtual='inc/****2.asp'-->
<%case 3%>
<!--#include virtual='inc/****3.asp'-->
<%case 4%>
<!--#include virtual='inc/****4.asp'-->
<%end select%>
만약 당신이 다른 더 좋은 방법이 있다면, 우리와 교류하는 것을 환영합니다.당신은 당신의 생각을 블로그 평론에 남겨 둘 수 있습니다. 우리는 당신과 토론하기를 기대합니다.

보충: asp의include에 대한 명령은 다음과 같은 부분을 주의해야 합니다.


ASP 프로그램은 스크립트 명령을 실행하기 전에 이미 파일을 포함하고 있습니다.따라서 스크립트 명령을 사용하여 포함된 파일 이름을 만들 수 없습니다.예를 들어 ASP가 변수name에 파일 이름을 할당하기 전에 "#include"명령을 실행하려고 하기 때문에 아래 스크립트에서 파일 Header1을 열 수 없습니다.inc.

<% name= header1.inc %>

스크립트 명령과 프로세스는 스크립트 구분자 <%와%>, 즉 HTML 태그 또는 HTML 태그 내부에 완전히 포함되어야 합니다.즉, 포함할 수 없다는 것이다.asp 파일에서 스크립트 구분자를 열고 포함된 파일에서 구분자를 닫습니다.스크립트나 스크립트 명령은 완전한 단원이어야 합니다.예를 들어, 다음 스크립트는 작동하지 않습니다.

<%
For i = 1 To n
주 파일의 문

Next
%>
하지만 다음 스크립트가 작동합니다.
<%
For i = 1 to n
주 파일의 문
%>

<% Next %>
만약 ASP 스크립트에 포함된 파일에 스크립트가 필요하지 않은 대량의 함수와 변수가 존재한다면, 이러한 쓸모없는 구조는 오히려 성능에 영향을 주고 웹 응용 프로그램의 신축성을 떨어뜨릴 수 있다.따라서 보통 포함 파일을 여러 개의 작은 파일로 나누고, 서버 스크립트에 필요한 파일만 포함하며, 군더더기 정보가 있는 하나 이상의 대형 포함 파일만 포함한다.

좋은 웹페이지 즐겨찾기