|
|
 |
Kapitola 52. 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
sem.
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í.
User Contributed Notes PHP a COM |
 |
| There are no user contributed notes for this page. |
| |