PHP: PHP a COM - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<PHP a HTMLPHP a jin� jazyky>
view the version of this page
Last updated: Thu, 15 Jul 2004

Kapitola 54. PHP a COM

PHP lze na platform�ch Win32 pou��t k p��stupu k objekt�m COM a DCOM.

1. Zkompiloval jsem knihovnu DLL k n�jak�m v�po�t�m. Existuje zp�sob, jak tuto knihovnu spustit pod PHP?
2. Co znamen� 'Unsupported variant type: xxxx (0xxxxx)'?
3. Je mo�n� v PHP manipulovat vizu�ln�mi objekty?
4. Mohu ukl�dat COM objekty do session?
5. Jak mohu zachycovat chyby COM?
6. Mohu generovat knihovny DLL z PHP skript�, podobn� jako v Perlu?
7. Co znamen� 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?
8. Jak lze spustit objekt COM ze vzd�len�ho serveru?
9. Zobrazilo se 'DCOM is disabled in C:\path...\scriptname.php on line 6', co m�m d�lat?
10. Lze na��st objekt ActiveX na str�nce, resp. s n�m manipulovat, pomoc� PHP?
11. Je mo�n� z�skat b��c� instanci komponenty?
12. Existuje zp�sob, jak obslou�it ud�lost odeslanou z objektu COM?
13. M�m probl�my, kdy� se pokou��m vyvolat metodu objektu COM, kter� vystavuje v�ce ne� jeden interface. Co m�m d�lat?
14. Kdy� PHP pracuje s COM, jak je to s COM+?
15. Jestli�e m��e PHP manipulovat s objekty COM, lze si p�edstavit pou�it� MTS ke spr�v� prost�edk� komponent spole�n� s PHP?

1. Zkompiloval jsem knihovnu DLL k n�jak�m v�po�t�m. Existuje zp�sob, jak tuto knihovnu spustit pod PHP?

Pokud je to jednoduch� DLL knihovna, zat�m ji nen� mo�n� spustit z PHP. Pokud v�ak tato knihovna obsahuje COM server, m��ete k n� p�istupovat, pokud implementuje interface IDispatch.

2. Co znamen� 'Unsupported variant type: xxxx (0xxxxx)'?

Existuj� tucty typ� VARIANT a jejich kombinac�. V�t�ina z nich je ji� podporov�na, ale n�kolik z nich teprve mus� b�t implementov�no. Pole nejsou podporov�na pln�. Mezi PHP a COM lze vym��ovat pouze jednorozm�rn� indexovan� pole. Pokud najdete jin� typy, kter� nejsou podporov�ny, ohla�te je pros�m jako chybu - bug (pokud ji� nebyly ohl�eny) a poskytn�te o nich tolik informac�, kolik m��ete.

3. Je mo�n� v PHP manipulovat vizu�ln�mi objekty?

Obecn� je, ale proto�e PHP se nej�ast�ji pou��v� jako webovsk� skriptovac� jazyk, b�� v prost�ed� WWW serveru, a proto se vizu�ln� objekty nezobrazuj� na plo�e displeje serveru. Pokud pou��v�te PHP pro aplika�n� skriptov�n�, nap�. spole�n� s PHP-GTK, neexistuje omezen� p��stupu a manipulace s vizu�ln�mi objekty pomoc� COM.

4. Mohu ukl�dat COM objekty do session?

Nem��ete. S instancemi COM se nakl�d� jako s prost�edky a proto jsou k dispozici pouze v kontextu jedin�ho skriptu.

5. Jak mohu zachycovat chyby COM?

Moment�ln� nen� mo�n� zachycovat chyby COM krom� zp�sob� poskytovan�ch samotn�m PHP (@, track_errors, ...), nicm�n� p�em��l�me o zp�sobu, jak to implementovat.

6. Mohu generovat knihovny DLL z PHP skript�, podobn� jako v Perlu?

Ne, v PHP bohu�el nen� takov� n�stroj k dispozici.

7. Co znamen� 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'?

Tato chyba m��e m�t v�ce p���in:

  • hodnota CLSID je chybn�

  • chyb� po�adovan� DLL knihovna

  • po�adovan� komponenta neimplementuje interface IDispatch

8. Jak lze spustit objekt COM ze vzd�len�ho serveru?

P�esn� tak, jak spou�t�te m�stn� objekty. Mus�te pouze pou��t IP adresu vzd�len�ho stroje jako druh� parametr konstruktoru COM.

Ujist�te se, �e je nastaveno com.allow_dcom=true v souboru php.ini.

9. Zobrazilo se 'DCOM is disabled in C:\path...\scriptname.php on line 6', co m�m d�lat?

Upravte soubor php.ini - nastavte tam com.allow_dcom=true.

10. Lze na��st objekt ActiveX na str�nce, resp. s n�m manipulovat, pomoc� PHP?

To nem� s PHP nic spole�n�ho. Objekty ActiveX se na��taj� na stran� klienta, pokud jsou vy��d�ny HTML dokumentem. Nem� to ��dnou souvislost s PHP skriptem a proto nen� mo�n� ��dn� p��m� interakce na stran� serveru.

11. Je mo�n� z�skat b��c� instanci komponenty?

Je to mo�n� pomoc� "moniker�". Pokud chcete z�skat v�ce referenc� na tut� instanci, m��ete vytvo�it tuto instanci t�mto zp�sobem:

$word = new COM("C:\docs\word.doc");

Toto vytvo�� novou instanci, pokud nen� k dispozici ��dn� b��c� instance, resp. vr�t� handle na b��c� instanci.

12. Existuje zp�sob, jak obslou�it ud�lost odeslanou z objektu COM?

Zat�m ne.

13. M�m probl�my, kdy� se pokou��m vyvolat metodu objektu COM, kter� vystavuje v�ce ne� jeden interface. Co m�m d�lat?

Odpov�� je stejn� tak jednoduch�, jako neuspokojiv�. Nelze to ��ci p�esn�, ale asi nem��ete d�lat nic. Pokud m� n�kdo specifick� informace o tomto probl�mu, a� laskav� nap�e .

14. Kdy� PHP pracuje s COM, jak je to s COM+?

COM+ roz�i�uje COM r�mec pro spr�vu komponent p�es MTS a MSMQ, ale nen� to nic zvl�tn�ho na to, aby PHP muselo takov� komponenty podporovat.

15. Jestli�e m��e PHP manipulovat s objekty COM, lze si p�edstavit pou�it� MTS ke spr�v� prost�edk� komponent spole�n� s PHP?

PHP samotn� nem��e zat�m obsluhovat transakce. Proto kdy� nastane chyba, nen� iniciov�n ��dn� rollback. Pokud pou��v�te komponenty, kter� podporuj� transakce, budete muset implementovat vlastn� mechanismus spr�vy transakc�.



add a note add a note User Contributed Notes
PHP a COM
junk.ghost@virgin dOtt net
05-Oct-2004 04:27
It may be obvious to everyone else but...

If you want to write your own COM DLL in MSVC++6 and you want to pass it a string, you need the following in your .idl file:

HRESULT function_name([in] BSTR parameter_name,
                     [retval, out] BSTR * retval);

retval is the result of your function as a string to be passed back.

BSTR is an unsigned short *, so if you want to use your string with STL string etc. you may need to convert parameters to and from char *.

The burden of my message is that from PHP

$comThing = new COM("comThing.comThing");
print $comThing->function_name("Jeremy");

Jeremy will be marshalled as wide chars, which match BSTR.
ALAN at DONTSPAMMEE;HOGAR dot COM
17-Aug-2002 04:39
ONE SAMPLE USING MS-XML3 PARSER ON WINDOWS
<?
  $xml
= new COM("Microsoft.XMLDOM");
 
$xml->async=false;
 
$xml->load("STYLE.xml");
 
$xsl = new COM("Microsoft.XMLDOM");
 
$xsl->async=false;
 
$xsl->load("STYLE.xsl");
 
$response=$xml->transformNode($xsl);
  print
$response;
?>

<PHP a HTMLPHP a jin� jazyky>
 Last updated: Thu, 15 Jul 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2004 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Sun Nov 14 23:09:54 2004 Local time zone must be set--see zic manual page