PHP와 COM
PHP는 Win32 플랫폼의 COM과 DCOM 객체(object)에 접근할수 있습니다.
- ì´ë¤ê²ì ê³ì°íë DLLì ë¹ëíìµëë¤. PHPììì ì´ DLLì ì¤íìí¬ì ìë ë°©ë² ì´ ììµëê¹?
- 'Unsupported variant type: xxxx (0xxxxx)'ì 무ìì ì미í©ëê¹?
- PHPìì ë¹ì£¼ì¼í ê°ì²´(visual object)를 ì¡°ìí ì ììµëê¹?
- ì¸ì ìì COM ê°ì²´ë¥¼ ì ì¥í ì ììµëê¹?
- COM ìë¬ë¥¼ ì´ë»ê² ì¶ì í ì ììµëê¹?
- íìì ì°ë ë°©ë²ì¼ë¡ PHP ì¤í¬ë¦½í¸ìì DLL íì¼ì ë§ë¤ì ììµëê¹?
- 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'ì ì미ë 무ìì ëê¹?
- ë¤ë¥¸ ìë²(remote server)ìì COM ê°ì²´(object)를 ì´ë»ê² ì¤íí ì ììµëê¹?
- 'DCOM is disabled in C:\path...\scriptname.php on line 6'ë¼ë ë©ìì§ë¥¼ ë´¤ìµëë¤. ì´ë»ê² í´ì¼ íëì?
- PHPìì ActiveX ê°ì²´(object)를 ë¶ë¥´ê±°ë/ë³ê²½í ì ììµëê¹?
- í¹ì ì»´í¬ëí¸ìì ì¤íì¤ì¸ ì¸ì¤í´ì¤(instance)ì ì ê·¼ ê°ë¥í©ëê¹?
- COM ê°ì²´ë¡ë¶í° ë°ì ì´ë²¤í¸ë¥¼ ì ì´í ë°©ë²ì´ ììµëê¹?
- íë ì´ìì ì¸í°íì´ì¤ë¥¼ ê°ë COM ê°ì²´ì ë©ìë(method)를 ë¶ë¬ ë¤ì´ë ¤ê³ íëë° ë¬¸ì ì ë´ì°©íìµëë¤. ì´ë»ê² í´ì¼ í©ëê¹?
- ê·¸ëì PHPì COMì´ ìëíëêµ°ì. COM+ë ì´ë¤ê°ì?
- PHPê° COM ê°ì²´ë¥¼ ë¤ë£°ììë¤ë©´, PHPë¡ ì»´í¬ëí¸ ììì ê´ë¦¬íë MTS를 ì¸ììì§ ììê¹ì?
-
어떤것을 계산하는 DLL을 빌드했습니다. PHP상에서 이 DLL을 실행시킬수 있는 방법 이 있습니까?
-
간단한 DLL이라도 PHP에서 실행할 방법은 아직 없습니다. 접근가능한 COM서버를 포함하는 DLL이고, IDispatch 인터페이스로 구현되어있다면 가능할수도 있습니다.
-
'Unsupported variant type: xxxx (0xxxxx)'은 무엇을 의미합니까?
-
몇가지의 VARIANT 타입과 그 타입간의 조합이 가능합니다. 그들 대부분은 거의 지원이 되고있지만 일부가 아직 구현되어있지 않습니다. 배열은 완전히 지원되지 않습니다. 오직 1차원 배열만이 PHP와 COM사이에서 전달이 가능합니다. 지원되지 않는 다른 타입을 발견했다면 그 타입을 버그 레포트로 알려주기랍니다 (아직 보고되지 않는것들이라면) 그리고 더 자세한 정보도 함께 제공해주십시오.
-
PHP에서 비주얼한 객체(visual object)를 조작할수 있습니까?
-
가능합니다. 하지만 PHP는 대부분 웹서버의 환경에서 웹 스크립트 언어로서 이용되고 있습니다. 따라서 서버가 비주얼 객체를 보여주지는 않을것입니다. 응용프로그램 스크립트를 위한 PHP(PHP-GTK같은)를 사용한다면 COM을 통해서 비주얼 객체(visual object)에 접근하고 조작하는데 아무 제한이 없습니다.
-
세션안에 COM 객체를 저장할 수 있습니까?
-
그건 안됩니다. COM 인스턴스(instance)는 리소스로 취급되므로 오직 단일 스크립트의 컨텍스트(context)에서만 가용한것입니다.
-
COM 에러를 어떻게 추적할 수 있습니까?
-
현재 PHP 자체에서 제공되는 방법(@, track_errors, ..)으로는 COM 에러를 추적하기는 불가능합니다. 하지만 이것을 구현할 방법을 강구중입니다.
-
'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'의 의미는 무엇입니까?
-
이 에러는 다음과 같은 원인일수 있습니다.
- CLSID가 잘못되었다
- 필요한 DLL이 존재하지 않는다
- 필요한 컴포넌트가 IDispatch 인터페이스로 구현되지 않았다
-
다른 서버(remote server)에서 COM 객체(object)를 어떻게 실행할수 있습니까?
-
로컬 객체를 실행시키는것과 완전히 똑같습니다. 단지 COM 생성자(constructor)의 두번째 인자(parameter)에 다른 서버의 IP를 넘겨주면 됩니다.
php.ini파일 내에서 com.allow_dcom=true값을 설정해야 한다는것을 잊지마십시오
-
'DCOM is disabled in C:\path...\scriptname.php on line 6'라는 메시지를 봤습니다. 어떻게 해야 하나요?
-
php.ini파일 내에서 com.allow_dcom=true로 설정합니다.
-
PHP에서 ActiveX 객체(object)를 부르거나/변경할수 있습니까?
-
이것은 PHP에서 할일이 아닙니다. HTML 문서에서 ActiveX 객체가 포함되있으면 클라이언트 단에서 그 코드를 처리하는 것입니다. PHP 스크립트와는 전혀 관련이 없고 따라서 서버단과는 직접적인 관련이 없습니다.
-
특정 컴포넌트에서 실행중인 인스턴스(instance)에 접근 가능합니까?
-
모니커(monikers)의 도움으로 가능합니다. 하나의 워드 인스턴스로 다방향 레퍼런스를 얻고 싶다면 다음처럼 그 인스턴스를 만들 수 있습니다.
$word = new COM("C:\docs\word.doc");
위처럼 하면 실행중인 인스턴스가 없을 때에는 새로운 인스턴스를 만들수 있고, 실행중인 인스턴스가 이미 존재하면 그 핸들을 넘겨주게 됩니다.
-
COM 객체로부터 받은 이벤트를 제어할 방법이 있습니까?
-
PHP 4.3.0을 실행하면, 아래 예제에서 볼수 있듯이 이벤트를 싱크(sink), 연결(bind) 할 수 있도록 정의할 수 있습니다. com_print_typeinfo()함수를 실행함으로써 이벤트 싱크(sink) 클래스에 대한 코드를 만들수 있습니다.
Example#1 COM event sink example
<?php
class IEEventSinker {
var $terminated = false;
function ProgressChange($progress, $progressmax) {
echo "Download progress: $progress / $progressmax\n";
}
function DocumentComplete(&$dom, $url) {
echo "Document $url complete\n";
}
function OnQuit() {
echo "Quit!\n";
$this->terminated = true;
}
}
$ie = new COM("InternetExplorer.Application");
$sink =& new IEEventSinker();
com_event_sink($ie, $sink, "DWebBrowserEvents2");
$ie->Visible = true;
$ie->Navigate("https://www.php.net");
while(!$sink->terminated) {
com_message_pump(4000);
}
$ie = null;
?> -
하나 이상의 인터페이스를 갖는 COM 객체의 메소드(method)를 불러 들이려고 하는데 문제에 봉착했습니다. 어떻게 해야 합니까?
-
답은 불만스럽겠지만 간단합니다. 확실치는 않지만 당신은 아무것도 할수없습니다. 어떤사람은 이 문제와 관련된 정보를 가지고 있습니다. » 저에게 알려주시라 :)