본문 바로가기
프로그래밍/ASP

동적 인클루드

by 백룡화검 2008. 6. 29.

출처 ..ing | 레인보우
원문 http://blog.naver.com/jeany4u/20003131947

가끔 asp가지고 작업을 하다보면  변수에 각기다른 어떤 값을 담고 있는 파일들을 조건에 맞춰 include 해야
하는 경우가 있습니다.
대부분 이런 시도를 하지요 <!-- #include file="test<%=id%>.asp" --> 하지만 결과는 원치않는 메세지를 보게
됩니다.
이때 다른 방법도 많지만 vbscript 에서 제공하는 Execute 나 ExecuteGlobal 문을 사용할 수 있습니다.
이 명령어들을 보시면 아시겠지만 하나 이상의 실행문을 포함한 문자식을 실행시키는 역할을 하는데
FileSystemObject를 이용해서 파일을 읽어오거나 세션변수등 에 실행시킬 명령을 넣어두고 필요할때 실행시
켜 사용합니다.
서로 다른 이름을 가진 include 파일에 정의되어 있는 값들을 공유하기 위해서 괜찮은거 같습니다.
Server.Execute 같은 경우는 그안에서 다 실행 시켜버리고 결과만 받아 오는거 같던데... -.-a
include1.asp 파일에 arrTest = Array(10,20,30) 이란 내용이 있고
include2.asp 파일에 arrTest = Array(40,50,60) 이란 내용이 있을때  (파일확장자는 의미가 없습니다)
test.asp
Sub ReadFiles(id)
   Dim fso, ts, s
   Const ForReading = 1
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set ts = fso.OpenTextFile(Server.MapPath("include"& id &".asp"), ForReading)
   s = ts.ReadAll
   Set fso = Nothing
   Execute s
   Response.Write arrTest(2)
End Sub
이렇게 사용할때 넣는 id 값에 따라 출력되는 내용이 다를 겁니다.
Execute 와 ExecuteGlobal의 차이는 실행시킨 실행문의 사용 범위가 전역이나 지역이냐가 다릅니다.
ExecuteGlobal s 로 실행 시키면 arrTest라는 배열은 해당 sub 밖에서도 사용이 가능합니다. 주의 할점은 이미
다른 변수가 선언되어 있다 하더라도 덮어씌웁니다.
도움말을 보시면 sub나 function도 이렇게 그때그때 만들어 낼 수 있습니다.
사용자의 요청이 많고 큰주기로 변경이 있거나 거의 변경이 없는 내용을 DB 접근하지 않고 배열이나 변수에
담아 놓은 명령을 파일로 만들어 이런 방식으로 사용하는게 좋지 않을까 합니다.(맨날 똑같은 내용보는데 웹
서버는 놀고 DB서버는 허덕인다고 생각할때...)