[PHP-doc 18] Re: FAQ和訳(com.xml)

Masaki Fujimoto php-doc@php.gr.jp
Mon, 12 Nov 2001 21:18:51 +0900


ふじもとです。

作業予約させて下さい。

databases.xml         藤本 ドラフト
installation.xml      藤本 ドラフト
migration.xml         藤本 ドラフト
obtaining.xml         藤本 ドラフト
build.xml             廣川 作業中
general.xml           藤本 ドラフト
languages.xml         藤本 ドラフト
migration4.xml        藤本 ドラフト
using.xml
com.xml               藤本 ドラフト 
html.xml              藤本 作業中
mailinglist.xml       藤本 ドラフト
misc.xml              藤本 ドラフト

以下、com.xmlのドラフトです。一応http://www.studio-m.com/php/xml/com.xml
にも置いておきます。ところでfaq.com.q2の

"Only single dimensional indexed only arrays can be passed ..."

の箇所なのですが、これは"numerical indexed array only"という意味なのでしょ
うか?たしかに4.0.6ではそうなのですが、4.1.0のCVSソースではassocも使える
ようになってたような気がするので、ちょっと悩んでいます。

--- ここから ---
 <chapter id="faq.com">
  <title>PHPとCOM</title>
  <titleabbrev>PHPとCOM</titleabbrev>

   <para>
    PHPはWin32プラットフォーム上でCOMとDCOMオブジェクトにアクセスすることがで
    きます。
   </para>

  <qandaset>
   <qandaentry id="faq.com.q1">
    <question>
     <para>
      とある計算を行うDLLを作成しました。これをPHPで実行させる方法はありますか?
     </para>
    </question>
    <answer>
     <para>
      もしそれが普通のDLLなら、現在のところPHPからそれを実行する手段はありませ
      ん。DLLがCOMサーバを含んでいてIDispatchインターフェースが実装されている
      場合、PHPからアクセスすることができます。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q2">
    <question>
     <para>'Unsupported variant type: xxxx (0xxxxx)'とはどういう意味ですか?</para>
    </question>
    <answer>
     <para>
      多くのVARIANTタイプとその組み合わせがあり、そのほとんどはサポートされて
      いますが、残りのいくつかは未だ実装されていません。また配列も完全にサポー
      トされているわけではなく、PHPとCOMの間で受け渡しが可能なのは1次元の添字付
      配列のみです。もしこの他にサポートされていないタイプを見つけた場合は(既知
      でなければ)、できる限りの情報を添えてバグとして報告して下さい。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q3">
    <question>
     <para>PHPでビジュアルオブジェクトを操作できますか?</para>
    </question>
    <answer>
     <para>
      基本的には可能です。しかしPHPはほとんどの場合ウェブスクリプティングの言
      語として使用されウェブサーバ上で実行されるため、ビジュアルオブジェクトが
      サーバのデスクトップに現れることはありません。もしPHPをアプリケーション
      作成に使用する、すなわちPHP-GTKと合わせて使用する場合にはアクセスに制限
      はありません。COMを通じてビジュアルオブジェクトを操作することができます。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q4">
    <question>
     <para>COMオブジェクトをセッション情報として保存できますか?</para>
    </question>
    <answer>
     <para>
      できません。COMインスタンスはリソースとして扱われるため、1つのスクリプト
      を実行している間のみ使用可能です。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q5">
    <question>
     <para>COMの出力するエラーをトラップできますか?</para>
    </question>
    <answer>
     <para>
      現在の所、PHPが提供する方法(@, track_errors, ...)を使用してCOMのエラーを
      トラップすることはできません。しかし、私たちはこれを実装する方法を検討中
      です。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q6">
    <question>
     <para>
      PHPスクリプトからDLLを作成することはできますか?Perlではできるのですが。
     </para>
    </question>
    <answer>
     <para>
      いいえ、残念ながらPHPにはそのようなツールはありません。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q7">
    <question>
     <para>'Unable to obtain IDispatch interface for CLSID
     {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}'とはどういう意味ですか?</para>
    </question>
    <answer>
     <para>
      このエラーが発生する理由はいくつかあります:
      <itemizedlist>
       <listitem>
      <simpara>
        CLSIDが正しくない
      </simpara>
     </listitem>
       <listitem>
      <simpara>
        要求されたDLLが無い
      </simpara>
     </listitem>
       <listitem>
      <simpara>
        要求されたコンポーネントがIDispatchインターフェースを実装していない
      </simpara>
     </listitem>
    </itemizedlist>
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q8">
    <question>
     <para>COMオブジェクトをリモートサーバから実行するにはどうすればよいですか?</para>
    </question>
    <answer>
     <para>
      ローカルオブジェクトを実行するのと全く同様です。ただ、COMコンストラクタ
      の2番目のパラメータにリモートマシンのIPアドレスを渡すだけです。
     </para>
     <para>
      <literal>php.ini</literal>に<literal>com.allow_dcom=true</literal>をセッ
      トするのを忘れないでください。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q9">
    <question>
     <para>'DCOM is disabled in C:\path...\scriptname.php on line 6'というエラー
     が発生しました。どうすればよいですか?</para>
    </question>
    <answer>
     <para>
      <literal>php.ini</literal>を編集して
      <literal>com.allow_dcom=true</literal>として下さい。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q10">
    <question>
     <para>PHPを使用したページでActiveXオブジェクトをロード/操作することはでき
     ますか?</para>
    </question>
    <answer>
     <para>
      これははPHPとは関係ありません。ActiveXオブジェクトは、HTMLドキュメント
      から要求があった場合にクライアント側でロードされます。PHPスクリプトとは
      関係が無く、従ってサーバ側と直接やりとりすることもできません。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q11">
    <question>
     <para>実行中のコンポーネントのインスタンスを取得することはできますか?</para>
    </question>
    <answer>
     <para>
      モニカーを使用すれば可能です。同じWordインスタンスに対して複数の参照を取
      得したい場合は、以下のようにしてインスタンスを生成します:
     </para>
     <programlisting>
      $word = new COM("C:\docs\word.doc");
     </programlisting>
     <para>
      こうすれば、実行中のインスタンスが無い、もしくはインスタンスの取得が不可
      能だった場合には新規に生成され、インスタンスが取得できた場合はにはそのハ
      ンドルを返します。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q12">
    <question>
     <para>COMオブジェクトから送られてくるイベントを扱う方法はありますか?</para>
    </question>
    <answer>
     <para>
      現在のところ、ありません。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q13">
    <question>
     <para>2つ以上のインターフェースを公開しているCOMオブジェクトのメソッドを
     呼び出そうとして困っています。どうすればよいですか?</para>
    </question>
    <answer>
     <para>
      この問題に対する答えは、簡単ですが残念のものです。正確にはわかり
      ませんが、おそらく打つ手はありません。もしこの問題に関する具体的な情報が
      あったら<ulink url="mailto:harald.radi@nme.at">私</ulink>に教えて下さい。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q14">
    <question>
     <para>PHPはCOMを扱えるということは分かりました。ではCOM+についてはどうで
     すか?</para>
    </question>
    <answer>
     <para>
      COM+とはMTS(Microsoft Transaction Server)とMSMQ(Microsfot Message Queue
      Service)を通じてコンポーネントを操作するフレームワークによってCOMを拡張
      したものです。が、PHPがそういったコンポーネントをサポートするにあたって
      特別に必要なことは特にありません。
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.com.q15">
    <question>
     <para>PHPがCOMオブジェクトを操作することができるということは、MTSを使って
     コンポーネントリソースを扱えると考えてもよいということですか?</para>
    </question>
    <answer>
     <para>
      PHPそれ自体はまだトランザクションをサポートしていません。従ってエラーが
      発生してもロールバック処理は行われません。もしトランザクションをサポート
      するコンポーネントを使用する場合は、自分でトランザクション処理を実装する
      必要があります。
     </para>
    </answer>
   </qandaentry>

  </qandaset>
 </chapter>
--- ここまで ---

# cvs拝見しました。ありがとうございました > 廣川様

--
藤本 真樹

アストラザスタジオ
fujimoto@studio.co.jp