1
0
mirror of https://github.com/php/doc-ja.git synced 2026-03-23 22:52:11 +01:00
Files
archived-doc-ja/faq/com.xml

302 lines
10 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: e0352653179c355a6b9c353629147b06a2069f24 Maintainer: hirokawa Status: ready -->
<!-- CREDITS: takagi -->
<chapter xml:id="faq.com" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>PHP と COM</title>
<titleabbrev>PHP と COM</titleabbrev>
<para>
PHP は Win32 プラットフォーム上で COM と DCOM オブジェクトに
アクセスすることができます。
</para>
<qandaset>
<qandaentry xml:id="faq.com.q1">
<question>
<para>
とある計算を行う DLL を作成しました。これを PHP で実行させる方法は
ありますか?
</para>
</question>
<answer>
<para>
もしそれが普通の DLL なら、現在のところ PHP からそれを実行する手段は
ありません。DLL が COM サーバーを含んでいて IDispatch インターフェイスが
実装されている場合、PHP からアクセスすることができます。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q2">
<question>
<para>
'Unsupported variant type: xxxx (0xxxxx)'とはどういう意味ですか?
</para>
</question>
<answer>
<para>
多くの VARIANT タイプとその組み合わせがあり、そのほとんどは
サポートされていますが、残りのいくつかは未だ実装されていません。
また配列も完全にサポートされているわけではなく、PHP と COM の間で
受け渡しが可能なのは 1 次元の添字付配列のみです。もしこの他に
サポートされていないタイプを見つけた場合は(既知でなければ)、
できる限りの情報を添えてバグとして報告してください。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q3">
<question>
<para>PHP でビジュアルオブジェクトを操作できますか?</para>
</question>
<answer>
<para>
基本的には可能です。しかし PHP はほとんどの場合ウェブスクリプティングの
言語として使用されウェブサーバー上で実行されるため、ビジュアルオブジェクトが
サーバーのデスクトップに現れることはありません。もし PHP を
アプリケーション作成に使用する、すなわち PHP-GTK と合わせて
使用する場合にはアクセスに制限はありません。COM を通じて
ビジュアルオブジェクトを操作することができます。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q4">
<question>
<para>COM オブジェクトをセッション情報として保存できますか?</para>
</question>
<answer>
<para>
できません。COM インスタンスはリソースとして扱われるため、1 つの
スクリプトを実行している間のみ使用可能です。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q5">
<question>
<para>COM の出力するエラーをトラップできますか?</para>
</question>
<answer>
<para>
COM 拡張モジュールは <literal>com_exception</literal>
例外をスローします。これをキャッチし、<literal>code</literal>
メンバを調べることで次にすべきことを決定できます。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q6">
<question>
<para>
PHP スクリプトから DLL を作成することはできますか? Perl では
できるのですが。
</para>
</question>
<answer>
<para>
いいえ、残念ながら PHP にはそのようなツールはありません。
</para>
</answer>
</qandaentry>
<qandaentry xml: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 xml:id="faq.com.q8">
<question>
<para>
COM オブジェクトをリモートサーバーから実行するにはどうすればよいですか?
</para>
</question>
<answer>
<para>
ローカルオブジェクトを実行するのと全く同様です。ただ、COM
コンストラクタの 2 番目のパラメータにリモートマシンの IP アドレスを
渡すだけです。
</para>
<para>
&php.ini;
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;
をセットするのを忘れないでください。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q9">
<question>
<para>
'DCOM is disabled in C:\path...\scriptname.php on line 6' という
エラーが発生しました。どうすればよいですか?
</para>
</question>
<answer>
<para>
&php.ini; を編集して
<link linkend="ini.com.allow-dcom">com.allow_dcom</link><literal>=</literal>&true;.
としてください。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q10">
<question>
<para>
PHP を使用したページで ActiveX オブジェクトをロード/操作することは
できますか?
</para>
</question>
<answer>
<para>
これは PHP とは関係ありません。ActiveX オブジェクトは、HTML
ドキュメントから要求があった場合にクライアント側でロードされます。
PHP スクリプトとは関係が無く、従ってサーバー側と直接やりとりすることも
できません。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q11">
<question>
<para>
実行中のコンポーネントのインスタンスを取得することはできますか?
</para>
</question>
<answer>
<para>
モニカーを使用すれば可能です。同じ Word インスタンスに対して複数の
参照を取得したい場合は、以下のようにしてインスタンスを生成します。
</para>
<programlisting>
<![CDATA[
<?php
$word = new COM("C:\docs\word.doc");
?>
]]>
</programlisting>
<para>
こうすれば、実行中のインスタンスが無い、もしくはインスタンスの
取得が不可能だった場合には新規に生成され、インスタンスが取得できた
場合にはそのハンドルを返します。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q12">
<question>
<para>
COM オブジェクトから送られてくるイベントを扱う方法はありますか?
</para>
</question>
<answer>
<para>
イベントシンクを定義し、<function>com_event_sink</function>
を使用してそれをバインドすることが可能です。PHP でイベントシンククラスの
雛形を作成するために <function>com_print_typeinfo</function>
使用することが可能です。
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.com.q13">
<question>
<para>
2 つ以上のインターフェイスを公開している COM オブジェクトのメソッドを
呼び出そうとして困っています。どうすればよいですか?
</para>
</question>
<answer>
<para>
この問題に対する答えは、簡単ですが残念なものです。正確には
わかりませんが、おそらく打つ手はありません。
</para>
</answer>
</qandaentry>
<qandaentry xml: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 xml:id="faq.com.q15">
<question>
<para>
PHP が COM オブジェクトを操作することができるということは、MTS を
使ってコンポーネントリソースを扱えると考えてもよいということですか?
</para>
</question>
<answer>
<para>
PHP それ自体はまだトランザクションをサポートしていません。従って
エラーが発生してもロールバック処理は行われません。もし
トランザクションをサポートするコンポーネントを使用する場合は、
自分でトランザクション処理を実装する必要があります。
</para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->