| ||||||||||
Kapitola 51. PHP a COMPHP 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? 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. 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. 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. Nem∙╛ete. S instancemi COM se naklßdß jako s prost°edky a proto jsou k dispozici pouze v kontextu jedinΘho skriptu. 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. 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:
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. Upravte soubor php.ini - nastavte tam com.allow_dcom=true. 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. 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:
Toto vytvo°φ novou instanci, pokud nenφ k dispozici ╛ßdnß b∞╛φcφ instance, resp. vrßtφ handle na b∞╛φcφ instanci. 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 sem. 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φ. | ||||||||||
|