hirokawa Sat Nov 17 18:52:09 2001 EDT
Added files:
/phpdoc/ja/faq com.xml html.xml
Log:
added com.xml html.xml in japanese manual.
Index: phpdoc/ja/faq/com.xml
+++ phpdoc/ja/faq/com.xml
<?xml encoding="utf-8"?>
<!-- $Revision: 1.1 $ -->
<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:[EMAIL PROTECTED]">私
</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>
<!-- 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
sgml-parent-document:nil
sgml-default-dtd-file:"../../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
-->
Index: phpdoc/ja/faq/html.xml
+++ phpdoc/ja/faq/html.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 1.1 $ -->
<chapter id="faq.html">
<title>PHPとHTML</title>
<titleabbrev>PHPとHTML</titleabbrev>
<para>
PHPとHTMLは深く関係しています:PHPはHTMLを生成し、HTMLにはPHPに送信
される情報が記述されています。
</para>
<qandaset>
<qandaentry id="faq.html.encoding">
<question>
<para>
フォームから、もしくはURLから値を渡す場合にはどういったエンコー
ド/デコードが必要なのですか?
</para>
</question>
<answer>
<para>
エンコードが重要になる場面はいくつかあります。
<type>string</type> <varname>$data</varname>というエンコードされ
ていない文字列データを渡す場合について考えてみると:
<itemizedlist>
<listitem>
<para>
HTMLを通じて渡す場合:
文字列にはどのような値が含まれるか分か
らないので、データは<emphasis>必ず</emphasis>htmlescapeを行い、
ダブルクオートで囲まなければなりません。
</para>
</listitem>
<listitem>
<para>
URLを通じて渡す場合:
URLはいくつかのパーツから成り立ちます。
このデータをそのパーツのうちの一つであると解釈させたいならば、
<function>urlencode</function>でエンコード<emphasis>しなけれ
ばなりません。</emphasis>
</para>
</listitem>
</itemizedlist>
</para>
<para>
<example>
<title>HTMLのhidden要素</title>
<programlisting role="php">
<![CDATA[
<?php
echo "<input type=hidden value=\"" . htmlescape($data) . "\">\n";
?>
]]>
</programlisting>
</example>
<note>
<simpara>
<varname>$data</varname>を<function>urlencode</function>をして
はいけません。なぜなら、その作業はブラウザに任されているからで
す。一般に普及している全てのブラウザは正しくこの処理を行ってく
れます。ただ、この処理はメソッド(GETやPOST)が何であるかにかか
わらずに行われる、ということに気をつけてください。この処理に気
づくのはGETリクエストのときだけになるでしょう。なぜならPOSTリ
クエストの内容は通常目に触れることは無いからです。
</simpara>
</note>
<example>
<title>ユーザによって編集するデータ</title>
<programlisting role="php">
<![CDATA[
<?php
echo "<textarea name=mydata>\n";
echo htmlescape($data)."\n";
echo "</textarea>";
?>
]]>
</programlisting>
</example>
<note>
<simpara>
ブラウザはエスケープされたシンボルを解釈するので、dataは意図し
たとおりに表示されます。
</simpara>
<simpara>
フォームの内容を送信するとき、GETかPOSTかにかかわらずdataはブ
ラウザによってURLエンコードされ、PHPによってURLデコードされま
す。要は、URLエンコード/デコードを自分で行う必要はなく、これら
の処理は全て自動的に行われる、と言うことです。
</simpara>
</note>
<example>
<title>URL中の場合</title>
<programlisting role="php">
<![CDATA[
<?php
echo "<a href=\"" . htmlescape("/nexpage.php?stage=23&data=" .
urlencode($data)) . "\">\n";
?>
]]>
</programlisting>
</example>
<note>
<simpara>
この例では、実はGETリクエストを摸擬しています。このため、data
を手動で<function>urlencode</function>する必要があります。
</simpara>
</note>
<note>
<simpara>
全てのURLを<function>htmlescape</function>する必要があります。
なぜなら、このURLはHTMLのvalue属性として扱われるからです。この
場合は、ブラウザはまず<function>htmlescape</function>されたデー
タを元に戻し、それからURLを渡します。URLは
<function>urlencode</function>されているので、PHPはこれを正し
く解釈することができます。
</simpara>
<simpara>
URL中の<literal>&</literal>が<literal>&amp;</literal>
に置き換えられていることに気づくでしょう。もしあなたがこれを忘
れても、ほとんどのブラウザは元に戻してくれますが、必ずそうして
くれるとは限りませんので、URLが動的に変更されるものでなくても
URLは<function>htmlescape</function>される<emphasis>べき
</emphasis>です。
</simpara>
</note>
</para>
<!-- TODO: a note about addgpcslashes? -->
</answer>
</qandaentry>
<qandaentry id="faq.html.form-image">
<question>
<para>
<input type="image">タグを使おうとしているのですが、変数
$foo.xと$foo.yが使えません。どうすればよいのですか?
</para>
</question>
<answer>
<para>
以下のようなタグを使えば、標準のボタンの代わりに画像を使用して
フォームを送信することができます:
<programlisting role="html">
<![CDATA[
<input type="image" src="image.gif" name="foo">
]]>
</programlisting>
ユーザが画像のどこかをクリックすると、そのフォームの内容にfoo.x
とfoo.yという2つの変数が追加され、サーバに送信されます。
</para>
<para>
PHPでは$foo.xと$foo.yという名前は変数名として正しくないので、自
動的に$foo_xと$foo_yという名前に変換されます。要は、ピリオドがア
ンダースコアに置き換えられる、と言うことです。
</para>
</answer>
</qandaentry>
<qandaentry id="faq.html.arrays">
<question>
<para>HTMLフォームで配列を使用するにはどうすればよいですか?</para>
</question>
<answer>
<para>
フォームの内容をPHPスクリプトで<link
linkend="language.types.array">配列</link>として受け取るには、
<input>, <select> or <textarea>といった要素のnameを以
下のように指定します:
<programlisting role="html">
<![CDATA[
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyArray[]">
]]>
</programlisting>
変数名の最後にあるブラケットに注意してください。これにより、フォー
ムの内容が配列として扱われます。異なる要素に同じ名前をつけること
で要素を配列にグループ分けすることができます。
<programlisting role="html">
<![CDATA[
<input name="MyArray[]">
<input name="MyArray[]">
<input name="MyOtherArray[]">
<input name="MyOtherArray[]">
]]>
</programlisting>
上記のHTMLの場合、MyArrayとMyOtherArrayという2つの配列が生成され、
PHPスクリプトに送信されます。また、配列に特定のキーを設定するこ
ともできます。
<programlisting role="html">
<![CDATA[
<input name="AnotherArray[]">
<input name="AnotherArray[]">
<input name="AnotherArray[email]">
<input name="AnotherArray[phone]">
]]>
</programlisting>
この場合、配列AnotherArrayのキーは0, 1,
emailそしてphoneとなります。
</para>
<para>
<note>
<para>
HTMLに配列のキーを指定するかどうかは自由です。キーを指定しなかっ
た場合はフォームに現れる順番に番号がつけられます。最初の例だと、
キーは0, 1, 2, 3となります。
</para>
</note>
</para>
<para>
<link linkend="ref.array">配列関数</link>と
<link linkend="language.variables.external">PHPの外部から来る変数
</link>も参照して下さい。
</para>
</answer>
</qandaentry>
<qandaentry id="faq.html.select-multiple">
<question>
<para>
"select
multiple"タグで選択された全ての結果を取得するにはどうす
ればよいですか?
</para>
</question>
<answer>
<para>
"select
multiple"タグを使うと、ユーザはリストから複数の項目を選
択することができるようになります。選択された項目はフォームの
actionで指定されたハンドラに渡されます。問題は、これらの値が全て
同じ名前で渡されることです。つまり、
<programlisting role="html">
<![CDATA[
<select name="var" multiple>
]]>
</programlisting>
選択されたそれぞれの項目はactionのハンドラに次のように渡されます:
<programlisting>
var=option1
var=option2
var=option3
</programlisting>
それぞれの項目は前の変数<varname>$var</varname>の値を上書きして
しまいます。この問題を解決するには、PHPの"フォームの値を配列にす
る"機能を使います。以下のようにするとよいでしょう。
<programlisting role="html">
<![CDATA[
<select name="var[]" multiple>
]]>
</programlisting>
こうすればPHPに<varname>$var</varname>を配列として扱うように知ら
せることができ、各項目のvalueの値は配列の要素としてvar[]に追加さ
れます。最初の項目は<varname>$var[0]</varname>になり、次の項目は
<varname>$var[1]</varname>...というようになります。
<function>count</function>関数を使えば選択された項目の数を知るこ
とができます。またもし必要なら<function>sort</function>関数を使っ
てソートを行うこともできます。
</para>
<para>
JavaScriptを使っている場合、フォーム要素に要素名を使って(訳注:
document.myform.myelement.value等の様に)アクセスしようとすると、
要素名に含まれる<literal>[]</literal>が問題となることがあるので
気をつけてください。この場合は、数字で表されるフォーム要素のIDを
使用するか、シングルクオートで要素名を囲んでフォーム要素の配列の
インデックスとしてアクセスして下さい。例えば、以下のようにします:
<programlisting>
variable = documents.forms[0].elements['var[]'];
</programlisting>
</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
sgml-parent-document:nil
sgml-default-dtd-file:"../../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
-->