Examples
Examples -- Usage examples for the XML_RPC package
Using a Client to Get Info About the Latest PEAR Release
<?php require_once 'XML/RPC.php';
/* * Get info about the most recently released PEAR package */ $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');
// If you want to turn debugging on... // $cli->setDebug(1);
// If your payload requires extra lines to stay in tact... // NOTE: The $remove_extra_lines property was added in Version 1.4.6. // $cli->remove_extra_lines = false;
// If inspect the XML request sent to the server... // $msg->createPayload(); // logit($msg->payload); // Hypothetical function.
$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 { /* * Display problems that have been gracefully cought and * reported by the xmlrpc.php script */ echo 'Fault Code: ' . $resp->faultCode() . "\n"; echo 'Fault Reason: ' . $resp->faultString() . "\n"; }
// To inspect the XML response from the server... // NOTE: The $response_payload property was added in Version 1.4.6. // logit($msg->response_payload); // Hypothetical function. ?>
|
A Complete Client and Server Combination
Here is the server script. It's named xmlrpc.php and located
in the document root of the web server at localhost:
<?php require_once 'XML/RPC/Server.php';
/* * Declare the functions, etc. */ function returnTimes2($params) { $obj = new some_class_name; return $obj->returnTimes2($params); }
class some_class_name { function returnTimes2($params) { $param = $params->getParam(0);
// This error checking syntax was added in Release 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;
/* * Establish the dispatch map and XML_RPC server instance. */ $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 ); ?>
|
And here is the client script:
<?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 { /* * Display problems that have been gracefully cought and * reported by the xmlrpc.php script. */ echo 'Fault Code: ' . $resp->faultCode() . "\n"; echo 'Fault Reason: ' . $resp->faultString() . "\n"; } ?>
|
Automatically encoding data
The XML_RPC_encode() function automatically converts
PHP data into the format needed by the XML_RPC library.
<?php require_once 'XML/RPC.php';
$data = fetch_row_from_db(); // Hypothetical example.
$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);
// Process the same way as the other examples... ?>
|