例
例 – XML_RPC パッケージの利用例
クライアントを使用して、PEAR の最新情報を取得する
<?php
require_once 'XML/RPC.php';
/*
* いちばん最近にリリースされた PEAR パッケージの情報を取得する
*/
$params = array(new XML_RPC_Value(1, 'int'));
$msg = new XML_RPC_Message('release.getRecent', $params);
$cli = new XML_RPC_Client('/xmlrpc.php', 'pear.php.net');
// デバッグを有効にしたい場合は...
// $cli->setDebug(1);
// 余分な行をそのままにしておきたいのなら...
// 注意: プロパティ $remove_extra_lines はバージョン 1.4.6 で追加されました。
// $cli->remove_extra_lines = false;
// サーバに送信する XML を調べるのなら...
// $msg->createPayload();
// logit($msg->payload); // 仮の関数
$resp = $cli->send($msg);
if (!$resp) {
echo 'Communication error: ' . $cli->errstr;
exit;
}
if (!$resp->faultCode()) {
$val = $resp->value();
$data = XML_RPC_decode($val);
echo $data[0]['name'] . ' is at version ' . $data[0]['version'];
} else {
/*
* xmlrpc.php スクリプトが遭遇した問題を
* 報告する
*/
echo 'Fault Code: ' . $resp->faultCode() . "\n";
echo 'Fault Reason: ' . $resp->faultString() . "\n";
}
// サーバからの XML 応答を調べるのなら...
// 注意: プロパティ $response_payload はバージョン 1.4.6 で追加されました。
// logit($msg->response_payload); // 仮の関数
?>
クライアント - サーバ の組み合わせ
これがサーバ側のスクリプトです。localhost の web サーバの
ドキュメントルートに、xmlrpc.php という名前で設置します。
<?php
require_once 'XML/RPC/Server.php';
function returnTimes2($params) {
$obj = new some_class_name;
return $obj->returnTimes2($params);
}
class some_class_name {
function returnTimes2($params) {
$param = $params->getParam(0);
// このエラーチェック構文は、リリース 1.3.0 で追加されました
if (!XML_RPC_Value::isValue($param)) {
return $param;
}
$val = new XML_RPC_Value($param->scalarval() * 2, 'int');
return new XML_RPC_Response($val);
}
}
$some_object = new some_class_name;
/*
* ディスパッチマップと XML_RPC サーバインターフェイスを確立します
*/
$server = new XML_RPC_Server(
array(
'function_times2' => array(
'function' => 'returnTimes2'
),
'class_paamayim_nekudotayim_times2' => array(
'function' => 'some_class_name::returnTimes2'
),
'class_times2' => array(
'function' => array('some_class_name', 'returnTimes2')
),
'object_times2' => array(
'function' => array($some_object, 'returnTimes2')
),
),
1 // serviceNow
);
?>
そしてこちらがクライアント側のスクリプトです。
<?php
require_once 'XML/RPC.php';
$input = 8;
$params = array(new XML_RPC_Value($input, 'int'));
$msg = new XML_RPC_Message('function_times2', $params);
$cli = new XML_RPC_Client('/xmlrpc.php', 'localhost');
// $cli->setDebug(1);
$resp = $cli->send($msg);
if (!$resp) {
echo 'Communication error: ' . $cli->errstr;
exit;
}
if (!$resp->faultCode()) {
$val = $resp->value();
echo $input . ' times 2 is ' . $val->scalarval();
} else {
/*
* xmlrpc.php スクリプトが遭遇した問題を
* 報告する
*/
echo 'Fault Code: ' . $resp->faultCode() . "\n";
echo 'Fault Reason: ' . $resp->faultString() . "\n";
}
?>
自動的なデータのエンコード
XML_RPC_encode() 関数は、
PHP のデータを自動的に XML_RPC ライブラリの形式に変換します。
<?php
require_once 'XML/RPC.php';
$data = fetch_row_from_db(); // 仮の関数
$params = array(XML_RPC_encode($data));
$msg = new XML_RPC_Message('some_function_name', $params);
$cli = new XML_RPC_Client('/xmlrpc.php', 'pear.php.net');
$resp = $cli->send($msg);
// 他の例についても同様に処理します...
?>