Top > xtra > php_manual > xmlrpc

These documents are provided under PHP license.

XML-RPC 関数

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

諸般の事情で xmlrpc extension がインストールできない場合は、 XMLRPC for PHPextras で API 互換で代用できるようです。

目次

関数の構成

xmlrpc extension で提供されている関数は大別して次の 2 つです。 実際に HTTP 通信路に XML を送出するといった通信路に関する操作は、 この関数群には含まれていません *1

  • XML 形式と PHP ネイティブ形式の間を変換する関数群
  • XML-RPC サーバ実装の関数群

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

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

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

型の対応

PHP の内部型と XML-RPC での型は次のような対応になります。 これらは xmlrpc extension 側で自動的に変換されます。

PHPXML-RPC
integerint
stringstring
booleanboolean
floatdouble
arrayarray,struct

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

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

  • 「.0」を最後につけた文字列をキーにする
  • 先頭に「+」をつけた文字列をキーにする

output_options

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

マルチバイト文字列(日本語)の扱い

マルチバイトを扱うときは注意してください。デフォルト値では動作しません。

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 の文字セット宣言を解釈しないパーサを使っている場合は、このようにしなければなりません。

  1. 文字列はすべて文字エンティティ参照形式に変換して xmlrpc 関数に渡す。
    $THE_STRING = mb_convert_encoding($THE_STRING, 'HTML-ENTITIES', 'UTF-8');
  2. xmlrpc 関数での output_options は、既にエスケープされたデータを受け取ると期待して設定する。
    $output_options = array('escaping' => array());

*1 この点は他の XML-RPC ライブラリ実装とは特徴的に異なります。

リロード   新規 下位ページ作成 編集 凍結 差分 添付 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Wed, 24 Sep 2014 17:02:54 JST (1176d)

© 2006-2008 Internet Revolution