![]()
|
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7">
第 52 ç« PHPã¨COMPHPã¯Win32プラットフォーム上ã§COMã¨DCOMオブジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ ãã¾ã™ã€‚
1. ã¨ã‚る計算を行ã†DLLを作æˆã—ã¾ã—ãŸã€‚ã“れをPHPã§å®Ÿè¡Œã•ã›ã‚‹æ–¹æ³•ã¯ã‚ りã¾ã™ã‹ï¼Ÿ ã‚‚ã—ãã‚ŒãŒæ™®é€šã®DLLãªã‚‰ã€ç¾åœ¨ã®ã¨ã“ã‚PHPã‹ã‚‰ãれを実行ã™ã‚‹æ‰‹æ®µã¯ ã‚りã¾ã›ã‚“。DLLãŒCOMサーãƒã‚’å«ã‚“ã§ã„ã¦IDispatchインターフェース ãŒå®Ÿè£…ã•れã¦ã„ã‚‹å ´åˆã€PHPã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 多ãã®VARIANTタイプã¨ãã®çµ„ã¿åˆã‚ã›ãŒã‚りã€ãã®ã»ã¨ã‚“ã©ã¯ã‚µãƒãƒ¼ トã•れã¦ã„ã¾ã™ãŒã€æ®‹ã‚Šã®ã„ãã¤ã‹ã¯æœªã 実装ã•れã¦ã„ã¾ã›ã‚“。ã¾ãŸé… 列も完全ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã‚‹ã‚ã‘ã§ã¯ãªãã€PHPã¨COMã®é–“ã§å—ã‘æ¸¡ã— ãŒå¯èƒ½ãªã®ã¯1æ¬¡å…ƒã®æ·»å—付é…列ã®ã¿ã§ã™ã€‚ã‚‚ã—ã“ã®ä»–ã«ã‚µãƒãƒ¼ãƒˆã•れ ã¦ã„ãªã„タイプを見ã¤ã‘ãŸå ´åˆã¯(既知ã§ãªã‘れã°)ã€ã§ãã‚‹é™ã‚Šã®æƒ…å ± ã‚’æ·»ãˆã¦ãƒã‚°ã¨ã—ã¦å ±å‘Šã—ã¦ä¸‹ã•ã„。 基本的ã«ã¯å¯èƒ½ã§ã™ã€‚ã—ã‹ã—PHPã¯ã»ã¨ã‚“ã©ã®å ´åˆã‚¦ã‚§ãƒ–スクリプティ ングã®è¨€èªžã¨ã—ã¦ä½¿ç”¨ã•れウェブサーãƒä¸Šã§å®Ÿè¡Œã•れるãŸã‚ã€ãƒ“ジュア ルオブジェクトãŒã‚µãƒ¼ãƒã®ãƒ‡ã‚¹ã‚¯ãƒˆãƒƒãƒ—ã«ç¾ã‚Œã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。も ã—PHPをアプリケーション作æˆã«ä½¿ç”¨ã™ã‚‹ã€ã™ãªã‚ã¡PHP-GTKã¨åˆã‚ã›ã¦ 使用ã™ã‚‹å ´åˆã«ã¯ã‚¢ã‚¯ã‚»ã‚¹ã«åˆ¶é™ã¯ã‚りã¾ã›ã‚“。COMを通ã˜ã¦ãƒ“ジュア ルオブジェクトをæ“作ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã§ãã¾ã›ã‚“。COMインスタンスã¯ãƒªã‚½ãƒ¼ã‚¹ã¨ã—ã¦æ‰±ã‚れるãŸã‚ã€1ã¤ã®ã‚¹ クリプトを実行ã—ã¦ã„ã‚‹é–“ã®ã¿ä½¿ç”¨å¯èƒ½ã§ã™ã€‚ ç¾åœ¨ã®æ‰€ã€PHPãŒæä¾›ã™ã‚‹æ–¹æ³•(@, track_errors, ...)を使用ã—ã¦COM㮠エラーをトラップã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。ã—ã‹ã—ã€ç§ãŸã¡ã¯ã“れを実装 ã™ã‚‹æ–¹æ³•を検討ä¸ã§ã™ã€‚ 6. PHPスクリプトã‹ã‚‰DLLを作æˆã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã‹ï¼ŸPerlã§ã¯ã§ãã‚‹ã® ã§ã™ãŒã€‚ ã„ã„ãˆã€æ®‹å¿µãªãŒã‚‰PHPã«ã¯ãã®ã‚ˆã†ãªãƒ„ールã¯ã‚りã¾ã›ã‚“。 7. 'Unable to obtain IDispatch interface for CLSID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'ã¨ã¯ã©ã†ã„ã†æ„味ã§ã™ã‹ï¼Ÿ ã“ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã™ã‚‹ç†ç”±ã¯ã„ãã¤ã‹ã‚りã¾ã™ï¼š
8. COMオブジェクトをリモートサーãƒã‹ã‚‰å®Ÿè¡Œã™ã‚‹ã«ã¯ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ ã™ã‹ï¼Ÿ ãƒãƒ¼ã‚«ãƒ«ã‚ªãƒ–ジェクトを実行ã™ã‚‹ã®ã¨å…¨ãåŒæ§˜ã§ã™ã€‚ãŸã ã€COMコンス トラクタã®2番目ã®ãƒ‘ラメータã«ãƒªãƒ¢ãƒ¼ãƒˆãƒžã‚·ãƒ³ã®IPアドレスを渡ã™ã ã‘ã§ã™ã€‚ php.iniã« com.allow_dcom=trueをセットã™ã‚‹ã®ã‚’忘れãªã„ã§ ãã ã•ã„。 9. 'DCOM is disabled in C:\path...\scriptname.php on line 6'ã¨ã„ㆠエラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ php.iniを編集ã—㦠com.allow_dcom=trueã¨ã—ã¦ä¸‹ã•ã„。 10. PHPを使用ã—ãŸãƒšãƒ¼ã‚¸ã§ActiveXオブジェクトをãƒãƒ¼ãƒ‰/æ“作ã™ã‚‹ã“ã¨ã¯ ã§ãã¾ã™ã‹ï¼Ÿ ã“れã¯ã¯PHPã¨ã¯é–¢ä¿‚ã‚りã¾ã›ã‚“。ActiveXオブジェクトã¯ã€HTMLドã‚ュ メントã‹ã‚‰è¦æ±‚ãŒã‚ã£ãŸå ´åˆã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå´ã§ãƒãƒ¼ãƒ‰ã•れã¾ã™ã€‚PHP スクリプトã¨ã¯é–¢ä¿‚ãŒç„¡ãã€å¾“ã£ã¦ã‚µãƒ¼ãƒå´ã¨ç›´æŽ¥ã‚„りã¨ã‚Šã™ã‚‹ã“ã¨ã‚‚ ã§ãã¾ã›ã‚“。 11. 実行ä¸ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã™ã‹ï¼Ÿ モニカーを使用ã™ã‚Œã°å¯èƒ½ã§ã™ã€‚åŒã˜Wordインスタンスã«å¯¾ã—ã¦è¤‡æ•°ã® å‚ç…§ã‚’å–å¾—ã—ãŸã„å ´åˆã¯ã€ä»¥ä¸‹ã®ã‚ˆã†ã«ã—ã¦ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’生æˆã—ã¾ã™ï¼š
ã“ã†ã™ã‚Œã°ã€å®Ÿè¡Œä¸ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒç„¡ã„ã€ã‚‚ã—ãã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®å– å¾—ãŒä¸å¯èƒ½ã ã£ãŸå ´åˆã«ã¯æ–°è¦ã«ç”Ÿæˆã•れã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒå–å¾—ã§ããŸ å ´åˆã¯ã«ã¯ãã®ãƒãƒ³ãƒ‰ãƒ«ã‚’è¿”ã—ã¾ã™ã€‚ ç¾åœ¨ã®ã¨ã“ã‚ã€ã‚りã¾ã›ã‚“。 13. 2ã¤ä»¥ä¸Šã®ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースを公開ã—ã¦ã„ã‚‹COMオブジェクトã®ãƒ¡ã‚½ãƒƒãƒ‰ を呼ã³å‡ºãã†ã¨ã—ã¦å›°ã£ã¦ã„ã¾ã™ã€‚ã©ã†ã™ã‚Œã°ã‚ˆã„ã§ã™ã‹ï¼Ÿ ã“ã®å•題ã«å¯¾ã™ã‚‹ç”ãˆã¯ã€ç°¡å˜ã§ã™ãŒæ®‹å¿µãªã‚‚ã®ã§ã™ã€‚æ£ç¢ºã«ã¯ã‚ã‹ã‚Š ã¾ã›ã‚“ãŒã€ãŠãã‚‰ãæ‰“ã¤æ‰‹ã¯ã‚りã¾ã›ã‚“。もã—ã“ã®å•題ã«é–¢ã™ã‚‹å…·ä½“çš„ ãªæƒ…å ±ãŒã‚ã£ãŸã‚‰ç§ ã«æ•™ãˆã¦ä¸‹ã•ã„。 14. PHPã¯COMを扱ãˆã‚‹ã¨ã„ã†ã“ã¨ã¯åˆ†ã‹ã‚Šã¾ã—ãŸã€‚ã§ã¯COM+ã«ã¤ã„ã¦ã¯ã©ã† ã§ã™ã‹ï¼Ÿ COM+ã¨ã¯MTS(Microsoft Transaction Server)ã¨MSMQ(Microsfot Message Queue Service)を通ã˜ã¦ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’æ“作ã™ã‚‹ãƒ•レームワー クã«ã‚ˆã£ã¦COMã‚’æ‹¡å¼µã—ãŸã‚‚ã®ã§ã™ã€‚ãŒã€PHPãŒãã†ã„ã£ãŸã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ トをサãƒãƒ¼ãƒˆã™ã‚‹ã«ã‚ãŸã£ã¦ç‰¹åˆ¥ã«å¿…è¦ãªã“ã¨ã¯ç‰¹ã«ã‚りã¾ã›ã‚“。 15. PHPãŒCOMオブジェクトをæ“作ã™ã‚‹ã“ã¨ãŒã§ãã‚‹ã¨ã„ã†ã“ã¨ã¯ã€MTSを使㣠ã¦ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãƒªã‚½ãƒ¼ã‚¹ã‚’扱ãˆã‚‹ã¨è€ƒãˆã¦ã‚‚よã„ã¨ã„ã†ã“ã¨ã§ã™ã‹ï¼Ÿ PHPãれ自体ã¯ã¾ã トランザクションをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。従ã£ã¦ エラーãŒç™ºç”Ÿã—ã¦ã‚‚ãƒãƒ¼ãƒ«ãƒãƒƒã‚¯å‡¦ç†ã¯è¡Œã‚れã¾ã›ã‚“。もã—トランザク ションをサãƒãƒ¼ãƒˆã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’使用ã™ã‚‹å ´åˆã¯ã€è‡ªåˆ†ã§ãƒˆãƒ©ãƒ³ ザクション処ç†ã‚’実装ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚
|