PHPとPEARでXML-RPC

2005年3月1日
http://www.s-m-l.org
Suns & Moon Laboratory

はじめ

ブログを色々と調べているうちにXML-RPCというものにたどり着きました。 面白そうなので実験。

実験材料

調査

実装例

サーバ実装例

XML-RPC HOWTOの例をPEARで書いてみました。
エラー処理入っていませんが、そこはご愛嬌。
<?php require_once("XML/RPC.php"); require_once("XML/RPC/Server.php"); $GLOBALS['XML_RPC_defencoding'] = "UTF-8"; function foo ($params) { global $XML_RPC_erruser; // import user errcode value $p1 = $params->getParam(0); $p2 = $params->getParam(1); $v1 = $p1->scalarval(); $v2 = $p2->scalarval(); $value = new XML_RPC_Value($v1+$v2, "int"); return new XML_RPC_Response($value); } //RPCの実行 $s = new XML_RPC_Server(array("sample.sumAndDifference" => array("function" => "foo"))); ?>

実行結果

サーバ実行結果

クライアント実装例

XML-RPC HOWTOの例をPEARで書いてみました。
<html> <head> <title>XML-RPC(PHP) Client Demo</title> </head> <body> <h1>XML-RPC(PHP) Client Demo</h1> <?php require_once("XML/RPC.php"); $GLOBALS['XML_RPC_defencoding'] = "UTF-8"; //クライアントの作成 $xmlrpc_host = "localhost"; $xmlrpc_path = "/~test/xml_rpc/server.php"; $c = new XML_RPC_client( $xmlrpc_path, $xmlrpc_host, 80 ); //メッセージ作成 $params = array(new XML_RPC_Value( 5, 'int' ) ,new XML_RPC_Value( 3, 'int' )); $message = new XML_RPC_Message('sample.sumAndDifference',$params); //メッセージ送信 $response = $c->send($message); // Process the response. if (!$response->faultCode()) { $v = $response->value(); print "Value: ". $v->scalarval() ."<br>"; print "The XML received:<blockquote>" . $response->serialize(); print "</blockquote>"; }else{ print "Fault Code: " . $response->faultCode() . "<br>"; print "Fault Reason: " . $response->faultString() . "<br>"; } ?> </body> </html>

実行結果

クライアント実行結果

感想

「XML-RPCは情報が少ない、その理由はXML-RPCが簡単だから云々」みたいな事を書いていた人がいましたが、まさにそうかも知れません。
Home→PHPとPEARでXML-RPC
Suns & Moon Laboratory http://www.s-m-l.org