【PHP】XML-RPCを使ってサーバの機能を呼び出す
XML-RPCとはXMLを使った遠隔手順呼び出し(Remote Procedure Call)を行うためのプロトコル(取り決め)です。詳しくはWikipediaで。よく分からない人はここを読んだほうがいいです。
実際に試してみる方法ですが、Windows環境ならばXamppをインストールすればPEARのXML-RPCパッケージも同時にインストールされるので、手軽に試すことができます。
Linux環境の場合はPEARのXML-RPCパッケージがインストールしてあるか確認が必要です。
あとはここにあるサンプルコードを参考にすれば動作確認ができます。
ほとんど同じですが、私が書いたのも置いときます。クライアント側のソースにデバッグモードにするのと3秒でタイムアウトにする処理が入ってます。
●サーバ側(呼び出される側)のソース
<?php
require_once 'XML/RPC/Server.php';$map = array("sample.sumAndDifference" => array("function" => "foo"));
$s = new XML_RPC_Server($map);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);
}
?>
●クライアント側(呼び出し側)のソース
<html>
<head>
<title>XML-RPC PHP Demo</title>
</head>
<body>
<h1>XML-RPC PHP Demo</h1>
<textarea style="height:500px;width:500px;">
<?php
require_once 'XML/RPC.php';
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";//クライアントの作成
$c = new XML_RPC_client( '/xmlrpc/xmlrpc_srv.php', 'localhost', 80 );
$c->setDebug(1);
//メッセージ作成
$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, 3);// 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>";
}?>
</textarea>
</body></html>
ちょっとはまったのは、クライアント側でサーバ側のリソースを指定するときに頭にスラッシュをつけないと、「400 Bad Request」で返ってくる。404ではないので、記述方法が違うのかとか、Apacheの設定が違うのかとか別の方に走ってしまった。
動作環境:Xampp 1.6.6a