Top > xtra > php_manual > xmlrpc

These documents are provided under [[PHP license:http://www.php.net/license/]].

* XML-RPC 関数 [#vf0f481c]
xmlrpc extension を有効にすると使用できる関数群です。
公式マニュアルは http://www.php.net/xmlrpc を参照してください。
本マニュアルでは補足的な情報を記載しています。

諸般の事情で xmlrpc extension がインストールできない場合は、
[[XMLRPC for PHP:http://phpxmlrpc.sourceforge.net]]
の
[[extras:http://sourceforge.net/project/showfiles.php?group_id=34455&package_id=188337]]
で API 互換で代用できるようです。

目次
#ls()

** 関数の構成 [#c7ca2b28]
xmlrpc extension で提供されている関数は大別して次の 2 つです。
実際に HTTP 通信路に XML を送出するといった通信路に関する操作は、
この関数群には含まれていません
((この点は他の XML-RPC ライブラリ実装とは特徴的に異なります。))。
- XML 形式と PHP ネイティブ形式の間を変換する関数群
- XML-RPC サーバ実装の関数群

xmlrpc_server で始まる XML-RPC サーバ実装の関数群を使う場合は、
他の関数を使わずにおおよそのことができるはずです。
また、逆に XML 形式を直接操作する関数群を使う場合も、xmlrpc_server 関連の
関数を使うことはあまりないでしょう。

XML-RPC クライアントとして使う場合は、XML 形式を扱う関数群を使うことになります。

XML-RPC サーバを実装する場合は、どちらの関数群を使うかで 2 つの選択肢があります。

** 型の対応 [#jd457bdc]
PHP の内部型と XML-RPC での型は次のような対応になります。
これらは xmlrpc extension 側で自動的に変換されます。
| PHP     | XML-RPC      |h
| integer | int          |
| string  | string       |
| boolean | boolean      |
| float   | double       |
| array   | array,struct |

実際にどのような変換が起こるかは xmlrpc_get_type を使って調べることができます。
XML-RPC の base64 型と datetime 型は、
xmlrpc_set_type を使って PHP 文字列型から生成できます。
例は [[xmlrpc_set_type>xtra/php_manual/xmlrpc/xmlrpc_set_type]] を参照してください。

PHP 配列のキーに数字を使う場合は注意が必要です。
xmlrpc extension では単なる数字を struct の name に使うことはできません。
使おうとすると、その name は xml 変換時に失われます。
どうしてもキーに数字を使いたい場合は、次のようにして回避できるかもしれません。
-「.0」を最後につけた文字列をキーにする
- 先頭に「+」をつけた文字列をキーにする

** output_options [#w4065d7c]
xmlrpc extension のいくつかの関数では、
出力生成時の生成オプションを指定できます。
オプションは配列で表現され、配列のキーは次のものが使用できます。

: output_type | 'xml', 'php' のいずれか。
'php' の場合は php ネイティブ型で出力されます。
'xml' の場合は XML 文字列で出力されます。
'xml' がデフォルトです。

: verbosity | 'no_white_space', 'newlines_only', 'pretty' のいずれか。
XML の整形を指定します。
デフォルトは pretty で、綺麗なインデントがかかった XML を出力します。
newlines_only は要素ごとに改行が適当に入った形式の XML を出力します。
no_white_space はインデントや改行が除去された XML を出力します。
no_white_space, newlines_only, pretty の順番で転送サイズが大きくなります。
転送される XML の見た目が変化しますが、転送されるデータの内容は変わりはありません。

: escaping | 'cdata', 'non-ascii', 'non-print', 'markup' の組み合わせ。
値を1つだけ指定する場合はそのまま指定できますが、複数指定する場合は配列で指定します。
デフォルトは array('non-ascii','non-print','markup') で、
日本語を使うと正しく動作しません。
cdata は文字列をすべて CDATA セクションで扱います。
markup は XML でマークアップに使用される文字列を XML 中で文字列として
使える形にエスケープします。
non-ascii は文字バイト列を ISO-8859-1 文字列だったとみなして、
非 ASCII 文字を文字エンティティ参照形式に変換します。
non-print は同様に非表示文字を文字エンティティ参照形式に変換します。
non-print や non-ascii を使う際、実際には文字列が ISO-885901 文字列でなかった場合、
正しく動作しません。正常ではないエスケープが行われます。
ISO-8859-1 でない文字列を扱う際には、若干の工夫が必要です。

: version | XML のボキャブラリを指定します。
現在 'xmlrpc', 'soap 1.1', 'simple' の 3 種類がサポートされています。
'auto' と指定するとリクエスト受付の際に自動判定されます。
デフォルトは、可能なら 'auto' で、自動判定できない場合は 'xmlrpc' です。

: encoding | デフォルトは 'iso-8859-1' になっています。

出典 http://xmlrpc-epi.sourceforge.net/main.php?t=php_api#output_options

** マルチバイト文字列(日本語)の扱い [#yc436abd]
マルチバイトを扱うときは注意してください。デフォルト値では動作しません。

PHP 内部文字列から XML を生成する際、
日本語を使う場合は、次の設定でうまくいくでしょう。
PHP での内部文字列エンコーディングは UTF-8 であるとします。
 $output_options = array('escaping' => 'markup', 'encoding' => 'UTF-8');

相互運用上 CDATA が使えるとわかっている場合は、次でも動くかもしれません。
世にある XML パーサで CDATA を扱えないものもあるので、注意してください。
 $output_options = array('escaping' => 'cdata', 'encoding' => 'UTF-8');

あるいは若干手間がかかりますが、どのような場合でも正しく動く方法として次の方法があります。通信先が XML の文字セット宣言を解釈しないパーサを使っている場合は、このようにしなければなりません。
+ 文字列はすべて文字エンティティ参照形式に変換して xmlrpc 関数に渡す。
 $THE_STRING = mb_convert_encoding($THE_STRING, 'HTML-ENTITIES', 'UTF-8');
+ output_options は既にエスケープされたデータが渡されることを期待して設定する。
+ xmlrpc 関数での output_options は、既にエスケープされたデータを受け取ると期待して設定する。
 $output_options = array('escaping' => array());

    Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes

© 2006-2008 Internet Revolution