728x90
최근 ActiveX 컨트롤은 은행, 공공기관, 게임 사이트 등등 너무나 폭넓게 사용되고 있다. 웹의 제약을 넘어서 많은 일들을 할 수 있기때문에 많은 기관들이 ActiveX를 소위 남용하고 있다. 그래서 일각에서는 인터넷 익스플로어에서만 사용가능한 이 ActiveX를 사용하지않고 웹 표준을 따라서 사이트를 개발해주기 바라는 사람들의 목소리가 커져가고 있다. 하지만 웹 개발자의 입장에서 사실 편리하기도 하고 또한 ActiveX를 다룰줄 모르면 안되기에 PHP와 연동하는 방법을 살짝 알고 넘어가도록 하자.

다음의 파일은 아마도(기억이 잘 안난다) 내가 예전에 만들어 놓고 컴퓨터 귀퉁이 어디엔가 쳐박아둔 ActiveX 컨트롤이 아닌가 싶다. 책에 ActiveX 컨트롤 다루는 방법을 추가하려다 분량(편집하기 전에 1000페이지가 넘어버려서-_-) 및 시간 문제로 부득이하게 빠졌는데 아마 그걸 생각하고 만들어 둔게 아닐까 싶다. 어쨌든 오늘 컴퓨터 여기저기를 뒤지다가 나와서 이 글을 쓰게 되었다.


이 프로그램은 HTTP 프로토콜을 이용하여 여러개의 파일을 원하는 위치로 다운로드하는 ActiveX 컨트롤이다. 내 성격으로 미루어보아 이어받기 등은 구현이 안되어 있을것이 분명하다. 후훗. 델파이로 간단하게 만든 것인데 아마도 cab이라는 확장자가 매우 낯설게 느껴지리라 생각한다. cab은 압축(이라기보다는 여러파일을 하나로 묶어주는 역할) 파일이다. 알집이나 각종 압축 해제 프로그램을 사용하면 그 내용물을 볼 수 있다.  요놈의 cab 파일에다 인증서를 입히면 우리가 자주 보는 ActiveX 컨트롤이 되는 것이다. 그런데 인증서를 입히려면 베리사인과 같은 회사에서 인증서를 구매해야하는데 개인이 구매할만한 금액은 아니다. 거기다 테스트용이니 굳이 인증서를 살 필요도 없다. 그래서 일반적으로 테스트인증서를 이용하여 인증을 하게된다. 테스트 인증서는 무료로 제공하는 것으로 임시적으로 사용할 수 있으며 이를 배포할 경우 보안 설정때문에 대부분의 PC에서 설치가 거부된다. 따라서 배포는 안된다는 말씀.

길어진 이야기를 줄이고 본격적으로 이 ActiveX 컨트롤을 사용하는 방법을 알아보자.

<OBJECT id=httpdown   
classid="clsid:37B11AC0-EFEE-4BDC-93D8-7149C3E71503"
codebase="HTTPDownloadProj1.cab"   
width=350 height=250 align=center hspace=0 vspace=0>
</OBJECT>


우선 ActiveX 컨트롤을 웹 페이지에 표시하기 위해서는 위와 같이 <OBJECT> 태그를 사용하여야 한다. id는 이 ActiveX 컨트롤을 구분짓는 ID이고 classid는 ActiveX의 고유ID이다. 고유ID는 중복되지 않도록 생성한 값으로 수많은 ActiveX 사이에서 이들을 구분짓는 기능을 한다. codebase는 cab 파일의 위치를 지정하는 곳이다. 마지막으로 width, height, align 등은 웹 페이지에 표시할 ActiveX의 가로,세로 길이와 정렬 방법 등을 표현한 것이다. 이 <OBJECT> 태그 부분을 html 파일로 저장하고 해당 파일과 동일한 위치에 HTTPDownloadProj1.cab 파일을 두면(물론 다른 위치에 두고 codebase 값을 변경해도 된다.) 해당 파일을 브라우저로 보았을때 다음과 같은 화면을 볼 수 있다.


여기서 차단된 콘텐츠 허용을 클릭하면 ActiveX는 C:\WINDOWS\Downloaded Program Files\ 디렉토리에 설치되며 다음과 같이 웹페이지에 ActiveX 컨트롤이 보이게 된다.


이제 다운받을 파일들을 ActiveX 컨트롤에서 출력할 수 있도록 해보자. 이 ActiveX 컨트롤은 외부로 AddFile 이라는 함수를 공개하고 있어서 이 함수를 통해서 ActiveX와 대화를 나눌 수 있다. 이는 모든 ActiveX 컨트롤에 해당되는 것이 아니라 딱! 이 ActiveX 컨트롤에만 해당되는 소리다. 대부분의 ActiveX에서는 웹페이지와 정보를 공유하기 위해서 변수나 함수를 외부에서 사용할 수 있도록 공개하고 있다. 따라서 다른 ActiveX를 사용하고자 한다면 어떻게 정보를 교환할 수 있는지를 ActiveX 프로그램 개발자 혹은 설명서에서 알아내야 한다.

파일을 등록하기 위해서는 즉, AddFile 함수를 사용하기 위해서는 자바스크립트를 이용하여야 한다.

<script>
httpdown.AddFile("URL", "FILENAME", "SIZE");
</script>


위와 같이 매우 간단한 방법으로 파일을 등록할 수 있다. 반드시 이 부분은 <OBJECT> 태그보다 뒤(아래)에 나와야 한다. 여기서 httpdown은 <OBJECT> 태그에서의 ID 값을 의미하며 파라미터는 순서대로 파일의 위치 URL, 파일의 이름, 파일의 크기 이다. 예를들어서 이 블로그에 올라와있는 책의 소스코드를 등록해보자.

파일의 URL : http://brown.ezphp.net/attachment/cfile6.uf@192ED60F4B0B603910A3BF.zip
파일의 이름 : 뇌를자극하는PHP프로그래밍.zip
파일의 크기 : 111433 Bytes

이 정보를 가지고 다음과 같이 자바스크립트를 수정하면 ActiveX 컨트롤에 해당 파일이 등록된 것을 확인할 수 있다.

<OBJECT id=httpdown   
classid="clsid:37B11AC0-EFEE-4BDC-93D8-7149C3E71503"
codebase="HTTPDownloadProj1.cab"   
width=350 height=250 align=center hspace=0 vspace=0>
</OBJECT>

<script>
httpdown.AddFile("http://brown.ezphp.net/attachment/cfile6.uf@192ED60F4B0B603910A3BF.zip", "뇌를자극하는PHP프로그래밍.zip", "111433");
</script>


확인 버튼을 누르면 파일의 전송이 시작되고 오른쪽 그림과 같이 프로그레스바가 움직이는 것을 볼 수 있다. 물론 여러개의 파일을 다운받도록 하고 싶다면 AddFile 함수를 이용하여 등록하면 된다.

이제 PHP를 이용하여 AddFile 함수를 호출하여 파일을 추가해주는 부분을 작성해주면 모두 끝난다.

보안적인 이유로 파일을 업로드할때는 위와같이 해시값(192ED60F4B0B603910A3BF)을 파일 이름으로 저장하는 것이 좋다. 이렇게 해시값을 파일이름으로 변경하여 업로드하고 다운받을 때에는 원래 파일이름으로 되돌려주는 것이다. 원래 파일이름으로 되돌려주기 위해서 데이터베이스에 이전 이름과 새 이름을 기록하는 방법과 파일이름에 표시하는 방법이 있다.

원래이름|해시값

과 같은 형식으로 파일을 생성하고 구분자인 | 을 통해서 원래 이름으로 되돌릴 수 있다. 이때 점(.)과 같은 기호는 다른기호로 바꿔주고 다시 되돌려주는 것이 바람직하다.

이렇게 파일의 위치를 알게되면 PHP의 filesize 함수를 이용하여 파일의 크기를 알아내고 AddFile 부분을 완성하여 출력해주면 된다. PHP의 코드 부분은 시간이 되는대로 업데이트 하도록 하겠다.
728x90
복사했습니다!