-<html>
+<?php require_once __DIR__ . "/_prepend.php"; ?><html lang="en">
<head><title>xmlrpc - Introspect demo</title></head>
<body>
<h1>Introspect demo</h1>
<h2>Query server for available methods and their description</h2>
<h3>The code demonstrates usage of multicall and introspection methods</h3>
+<p>You can see the source to this page here: <a href="introspect.php?showSource=1">introspect.php</a></p>
<?php
-include_once __DIR__ . "/../../src/Autoloader.php";
-PhpXmlRpc\Autoloader::register();
-
function display_error($r)
{
print "An error occurred: ";
print "Code: " . $r->faultCode()
. " Reason: '" . $r->faultString() . "'<br/>";
}
-// 'new style' client constructor
-$client = new PhpXmlRpc\Client("http://phpxmlrpc.sourceforge.net/server.php");
+
+$client = new PhpXmlRpc\Client(XMLRPCSERVER);
+
+// First off, let's retrieve the list of methods available on the remote server
print "<h3>methods available at http://" . $client->server . $client->path . "</h3>\n";
$req = new PhpXmlRpc\Request('system.listMethods');
$resp = $client->send($req);
+
if ($resp->faultCode()) {
display_error($resp);
} else {
$v = $resp->value();
- for ($i = 0; $i < $v->arraysize(); $i++) {
- $mname = $v->arraymem($i);
- print "<h4>" . $mname->scalarval() . "</h4>\n";
+
+ // Then, retrieve the signature and help text of each available method
+ foreach ($v as $methodName) {
+ print "<h4>" . $methodName->scalarval() . "</h4>\n";
// build messages first, add params later
$m1 = new PhpXmlRpc\Request('system.methodHelp');
$m2 = new PhpXmlRpc\Request('system.methodSignature');
- $val = new PhpXmlRpc\Value($mname->scalarval(), "string");
+ $val = new PhpXmlRpc\Value($methodName->scalarval(), "string");
$m1->addParam($val);
$m2->addParam($val);
- // send multiple messages in one pass.
- // If server does not support multicall, client will fall back to 2 separate calls
+ // Send multiple requests in one http call.
+ // If server does not support multicall, client will automatically fall back to 2 separate calls
$ms = array($m1, $m2);
$rs = $client->send($ms);
if ($rs[0]->faultCode()) {
display_error($rs[1]);
} else {
print "<h4>Signature</h4><p>\n";
+ // note: using PhpXmlRpc\Encoder::decode() here would lead to cleaner code
$val = $rs[1]->value();
if ($val->kindOf() == "array") {
- for ($j = 0; $j < $val->arraysize(); $j++) {
- $x = $val->arraymem($j);
- $ret = $x->arraymem(0);
- print "<code>" . $ret->scalarval() . " "
- . $mname->scalarval() . "(";
- if ($x->arraysize() > 1) {
- for ($k = 1; $k < $x->arraysize(); $k++) {
- $y = $x->arraymem($k);
- print $y->scalarval();
- if ($k < $x->arraysize() - 1) {
+ foreach ($val as $x) {
+ $ret = $x[0];
+ print "<code>" . htmlspecialchars($ret->scalarval()) . " "
+ . htmlspecialchars($methodName->scalarval()) . "(";
+ if ($x->count() > 1) {
+ for ($k = 1; $k < $x->count(); $k++) {
+ $y = $x[$k];
+ print htmlspecialchars($y->scalarval());
+ if ($k < $x->count() - 1) {
print ", ";
}
}
}
?>
</body>
-</html>
+</html><?php require_once __DIR__ . "/_append.php"; ?>