티스토리 뷰

PHP 강좌/응용

ActiveX 컨트롤과 PHP의 연동 방법

행복한브라운 2009. 11. 24. 21:07
최근 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의 코드 부분은 시간이 되는대로 업데이트 하도록 하겠다.

'PHP 강좌 > 응용' 카테고리의 다른 글

ActiveX 컨트롤과 PHP의 연동 방법  (8) 2009.11.24
Comments
  • 프로필사진 fg기차 트레이너 좋은 강좌네여 ㅎ
    잘보고 갑니다 ~ ^-^
    2010.01.04 17:08
  • 프로필사진 Favicon of http://www.getoclover.com BlogIcon 게토 브라운님, www.ezphp.net이 현재 접속이 되지 않는군요? 2010.07.14 09:42
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 서버 호스팅하는 곳에 문제가 있어서 며칠간 접속이 불가능했는데 오늘에서야 접속이 가능하군요. 그런데 데이터베이스 정보가 반영이 안된것 같아요. 게시판이 제대로 동작하지 않습니다. 현재 좀 더 안정적인 서버 호스팅으로 옮겨보려고 시도하고 있습니다. 2010.07.14 13:06 신고
  • 프로필사진 Favicon of http://www.getoclover.com BlogIcon 게토 요즘 저도 서버호스팅을 알아보는 중이었는데, cafe24 서버호스팅이 월 5500원이더군요.
    그냥 참고하세요 ㅎ
    2010.07.14 15:56
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 정보 감사합니다.
    게토님 사이트에 들어가봤더니 아직 학생이신듯한데(중학교인지 고등학교인지는 모르겠지만) 뭔가에 열중하는 모습이 보기 좋군요. 꾸준히 공부하셔서 무서운 실력자가 되시길 부탁드립니다.

    덧. 사이트가 또 안들어가지는군요. -_-;;
    2010.07.14 17:16 신고
  • 프로필사진 Favicon of http://www.getoclover.com/ BlogIcon 게토 오타 제보입니다.
    146쪽에 중간 약간 윗부분에.........
    <textarea name="content" rows="5" cols="40">글의 내용을 입력하세요
    <textarea>
    라고 나와있지만, 맨 마지막 <textarea>는 </textarea>로 바뀌어야 될 것 같군요~
    =>
    <textarea name="content" rows="5" cols="40">글의 내용을 입력하세요
    </textarea>
    2010.07.26 21:01
  • 프로필사진 Favicon of https://brown.ezphp.net BlogIcon 행복한브라운 감사합니다. 바로 정정하도록 하겠습니다. 2010.07.27 12:36 신고
  • 프로필사진 카스 안녕하세요

    구글에서 ActiveX 관련하여 검색하다가 이리로 오게되었습니다.

    굉장히 도움되는 글을 올려주셔서 감사합니다.

    그런데 저기에 cab 파일 ocx 이거 소스코드도 공개해주실순없을까요?

    부탁드립니다.

    Activex 를 만들어보고있는데 MFC 프로젝트에서는 .Create 메소드로 팝업윈도우로 밖에 띄울줄 모르겠구요,,
    ATL 프로젝트로 하면 리스트뷰하나도 아직 못띄우겠습니다.

    소스를 보면서 공부해보고싶은데 딱 저거입니다 !

    부탁드리겠습니다.

    안녕히계세요.
    2010.08.05 21:28
댓글쓰기 폼