クライアントを使用して、PEAR の最新情報を取得する
例 63-1
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); // 仮の関数
|
|
クライアント - サーバ の組み合わせ
例 63-2
これがサーバ側のスクリプトです。localhost の web サーバの ドキュメントルートに、xmlrpc.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 );
|
そしてこちらがクライアント側のスクリプトです。
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 ライブラリの形式に変換します。
例 63-3
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); // 他の例についても同様に処理します...
|
|