Syndicate this site ATOM (XML) Syndicate this site RSS 2.0 (XML)

« at 新疆吐魯番 on 04/Aug/1999 | Blog's TOP | at 新疆烏魯木斉 on 05/Aug/1999 »

movabletype XML-RPC 002

Posted by snotch at May 31, 2003 3:46 PM

PHP における XML-RPC 利用の準備

XML-RPC の利点のひとつには、クライアント(サーバしかり)の記述言語が通信相手に左右されないということがある。Movabletype の XML-RPC インタフェースは Perl によって記述されているが、これを利用するクライアントはどの言語で記述されていようが問題ない。 今回は、PHPでXML-RPCクライアント・サーバを動かすための準備を行ってみたい。PHP における XML-RPC の実装について調べてみると、いくつもの実装が用意されていて、どれを選んでよいのかわかりにくい。代表的な実装と、それぞれの特徴は次の表のとおり。


実装特徴
PHP付随の
拡張パッケージ
http://xmlrpc-epi.sourceforge.net/
PHP本体バージョン 4.1.0 以降に、XML-RPC 拡張モジュールとして付随しているもの。現在のところ(バージョン 4.3.2)まだ実験段階であり、デフォルトでは有効となっていない。実装部分がC言語で記述されているので速度面で有利。
Usefulinc
XML-RPC CLASS
XML-RPC for PHP Homepage
もともと、UsefulincのEdd Dumbillが開発したもので、市販本の中には、この実装クラスを利用した例を多く見かける。便利なクラス群のおかげで、クライアント、サーバの記述が簡単に行える。
PEAR
XML-RPC Package
http://pear.php.net/package-info.php?pacid=17
上記の、Usefulinc XML-RPC CLASSを、Stig BakkenがPHP PEARへ移植を行ったもの。完成度が高く、広く利用されている。

PHP本体にソースコードとともに付随している XML-RPC 拡張パッケージは、しばらくのあいだ開発・管理が行われていないようなので、将来性やセキュリティ面に不安が残るし、現時点では基本的な関数しか用意されていないことから、あまりお勧めできない。現時点でのお勧めはPEAR のXML-RPC パッケージである。Usefulinc XML-RPC CLASSと同様にクラス群が充実していることに加え、PEARを使ったパッケージ管理、インストールが楽なところもよい。

PEAR XML-RPCパッケージの準備

現バージョン 4.3.2では、コンパイル時において --without-pear を指定しない限り、デフォルトで PEAR XML-RPC パッケージがインストールされるようになっている。PEAR XML-RPC パッケージの有無を確認するには、サーバにログインしてシェルから、

# pear list
Installed packages:
===================
Package        Version State
Archive_Tar    0.9     stable
Console_Getopt 1.0     stable
DB             1.3     stable
HTTP           1.2     stable
Mail           1.0.1   stable
Net_SMTP       1.0     stable
Net_Socket     1.0.1   stable
PEAR           1.1     stable
XML_Parser     1.0.1   stable
XML_RPC        1.0.4   stable

と実行し、Packageの列にXML_RPCがリストされていれば、既にインストールされている。
もし、リストされていない場合には、新規インストールを行うコマンドを実行する。

# pear install XML_RPC

また、バージョンが古い場合(現在バージョン1.0.4)には、

# pear upgrade XML_RPC

としてやれば、最新バージョンのものに置き換えられる。

コンパイル時に、PEARインストールディレクトリを指定するパラメータを変更していなければ、

  • /usr/local/lib/php/XML/PRC.php
  • /usr/local/lib/php/XML/PRC/Server.php

の2ファイルが、上記のパスに保存されているはずである。
デフォルトでは、 /usr/local/lib/php がインクルードパスとして指定されているので、それぞれのパッケージを利用するためには、

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XML_RPC_Client has a deprecated constructor in /usr/local/lib/php/XML/RPC.php on line 597 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XML_RPC_Response has a deprecated constructor in /usr/local/lib/php/XML/RPC.php on line 1046 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XML_RPC_Message has a deprecated constructor in /usr/local/lib/php/XML/RPC.php on line 1138 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XML_RPC_Value has a deprecated constructor in /usr/local/lib/php/XML/RPC.php on line 1552 Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XML_RPC_Server has a deprecated constructor in /usr/local/lib/php/XML/RPC/Server.php on line 263

というようにソース冒頭で宣言するだけで、PEAR XML-RPC パッケージのクラス群の使用準備は完了である。

TrackBack

Listed below are links to weblogs that reference movabletype XML-RPC 002:

» XML-RPC from PukiWiki/TrackBack 0.1
XML-RPC XML-RPC 参考web ▲ ▼参考web XML-RPC 仕様書 PHP における XML-RPC 利用の準備 Movable Type で使える XML-RPC API [Read More]

» PHPでXML-RPCメモ(1) from boku
ここに書いたような理由で、更新Pingサーバをつくることになった。たぶん色々苦労するはずなので、顛末をメモしていきます。 まずは更新Pingのしくみからして全くわかってないわけで... [Read More]

Comments

突然のコメント申し訳ありません。福岡在住のtallyhoと申します。
先日よりインターネット上で"XML RPC"の脆弱性に関する問題が取り扱われていますが、
http://www.isskk.co.jp/security_center/xml_rpc.html
実際のコンテンツの中で"XML RPC"を使っているかどうかを判別するためには、どのようにしたらよいのでしょうか?
ネット上で検索を行った結果、当ページにたどり着きました。

XML-RPC自体は,プログラム間でデータをやり取りする枠組みですので,XML-RPCによってデータがやり取りされていることが外から目に見えるわけではありません.よって,あるコンテンツを見て,XML-RPCが利用されているかどうかを,第3者が外から確認することは難しいです.
ただ,一部のWeblogシステムや写真共有システム等,外部に公開されたXML-RPCインタフェースを備えているシステムやサービスがあり,マニュアル等を調べれば,XML-RPCを利用しているかどうかが判ります.
いずれにしても,Web上のコンテンツでXML-RPCが使われているかどうかを正確に判断するためには,当該コンテンツのオリジナルファイル(プログラム),コンテンツが載っているサーバの設定等を確認する必要があります.