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>&amp;</literal>が<literal>&amp;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>
      &lt;input type="image"&gt;タグを使おうとしているのですが、変数
      $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>として受け取るには、
      &lt;input&gt;, &lt;select&gt; or &lt;textarea&gt;といった要素の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
-->

Reply via email to