Manuál PHP | ||
---|---|---|
Předcházející | Další |
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?
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:
hodnota CLSID je chybná
chybí požadovaná DLL knihovna
požadovaná komponenta neimplementuje interface IDispatch
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:
$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.
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í.
Předcházející | Domů | Další |
PHP a HTML | Nahoru | PHP a jiné jazyky |