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

[본문스크랩] ASP : 동적 인클루드

by 백룡화검 2010. 4. 23.

가끔 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서버는 허덕인다고 생각할때...)