|
|
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:
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? 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�.
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;
?>
| |