movabletype XML-RPC 002
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がリストされていれば、既にインストールされている。
もし、リストされていない場合には、新規インストールを行うコマンドを実行する。
また、バージョンが古い場合(現在バージョン1.0.4)には、
としてやれば、最新バージョンのものに置き換えられる。
コンパイル時に、PEARインストールディレクトリを指定するパラメータを変更していなければ、
- /usr/local/lib/php/XML/PRC.php
- /usr/local/lib/php/XML/PRC/Server.php
の2ファイルが、上記のパスに保存されているはずである。
デフォルトでは、 /usr/local/lib/php がインクルードパスとして指定されているので、それぞれのパッケージを利用するためには、
Warning: require_once(XML/RPC.php): failed to open stream: No such file or directory in /home/blog/mt/sunouchi/archives/2003/05/movabletype_xml_1.php on line 128
Fatal error: require_once(): Failed opening required 'XML/RPC.php' (include_path='.:/usr/local/lib/php') in /home/blog/mt/sunouchi/archives/2003/05/movabletype_xml_1.php on line 128