Hi Jough, After getting spooked that you'd managed to find another manifestation of a bug that I'd thought I'd fixed the other day I was releaved to find that was not the case - however you have uncovered an interesting drawback of the PEAR XML RPC lib, in that it doesn't like the use of "system." at the start of the method name.
I've done some testing and I think I've narrowed it down to that combination at the start of the methodName. The approx. reason for this is that the methodName goes through an eval() function which is confusing PHP when it finds "system." without the quotes. Hmmmm... XML RPC really needs to have a more flexible and robust way of specifying which function to call. Using eval() as an integral part of that only leads to problems in the end. It should not be necessary. If I had time I'd rewrite that part of the RPC lib. and I may just do that! See code following which is essentially yours, play around with having/not having "system." at the start of the methodName and you'll see it works without! Perhaps you may find some other combinations which the lib doesn't like! :-/ =================================================== // SERVER <?php require_once 'XML/RPC/Server.php'; function system_load() { // stuff... { return new XML_RPC_Response(new XML_RPC_Value("return string")); } } $dispatches = array('system.Load' => array('function' => 'system_load')); $server = new XML_RPC_Server($dispatches, 1); ?> // CLIENT <?php require_once 'XML/RPC.php'; $client = new XML_RPC_Client('/server_test.php', 'Kali', 80); $client->setDebug(1); // helps! $msg = new XML_RPC_Message('system.Load', array(new XML_RPC_Value("test string"))); $result = $client->send($msg); if($result->faultCode()) { // we have an error echo "Error Code: " . $result->faultCode() . "<BR>"; echo "Error String: " . $result->faultString() . "<BR>"; } else { // no error, you should get some decoded value out print XML_RPC_decode($result->value()); } ?> ======================================================= Hope this helps, Justin -----Original Message----- From: Jough P [mailto:[EMAIL PROTECTED] Sent: 06 August 2004 19:31 To: PHP; Justin Philpott Subject: Re: [PEAR] PHP5 and XML-RPC Hi There! Thanks for your reply! Sorry it's taken awhile to respond. Anyhow, I changed my code to the following: require_once 'XML/RPC.php'; $client = new XML_RPC_Client('/xmlrpc.php', 'localhost'); $msg = new XML_RPC_Message('system.load'); $result = $client->send($msg); if($result->faultCode()) { // we have an error echo "Error Code: " . $result->faultCode() . "<BR>"; echo "Error String: " . $result->faultString() . "<BR>"; } else { // no error, you should get some decoded value out print XML_RPC_decode($result->value()); } print XML_RPC_decode($result->value()); And I get the following: Error Code: 1 Error String: Unknown method Fatal error: Call to a member function kindOf() on a non-object in /usr/local/php5/lib/php/XML/RPC.php on line 1083 It seems to say that $client does not have a send method. Surely this isn't the case? Thanks! All help is appreciated!! I'll be much quicker to respond this time! --Jough On Aug 2, 2004, at 12:03 PM, Justin Philpott wrote: > Hi Jough, > > By looking at line 1083 I can see that whatever is getting passed to > XML_RPC_decode() is not a valid XML_RPC_Value object > > By looking at the code, if a fault were to occur, it still tries to > printout the value of the result. Reading the PEAR XML_RPC API docs > says > this: > > "If the response's faultCode is non-zero then the value returned by > this > method should not be used (it may not even be an object)" ... > > I think this may be the problem, so get it to print the faultCode and > faultString but like this instead: > > if($result->faultCode()) { > // we have an error > echo "Error\n"; // print the code and string here > } else { > // no error, you should get some decoded value out > print XML_RPC_decode($result->value()); > } > // always use {} with control structures, if you don't it will bite you > in the ass eventually... > // and remember to turn on debugging to see what's going on... > > hope this helps, > > Justin > > -----Original Message----- > From: Jough P [mailto:[EMAIL PROTECTED] > Sent: 31 July 2004 19:00 > To: [EMAIL PROTECTED] > Subject: [PEAR] PHP5 and XML-RPC > > > Greetings all, I'm copying code straight out of _Advanced PHP > Programming_ and am getting the following error on a Linux/Apache/PHP5 > box: > > Fatal error: Call to a member function kindOf() on a non-object in > /usr/local/lib/php/XML/RPC.php on line 1083 > > I'm wondering if the pear XML-RPC class has any issues with PHP 5. > But, I'm just learning how to use XML-RPC and could very well be doing > something stupid. ANY help at all would be greatly appreciated. > > Here is the code: > CLIENT: > <?php > require_once 'XML/RPC.php'; > > $client = new XML_RPC_Client('/xmlrpc.php', 'localhost'); > $msg = new XML_RPC_Message('system.load'); > $result = $client->send($msg); > if($result->faultCode()) > echo "Error\n"; > > print XML_RPC_decode($result->value()); > ?> > > > SERVER: > <?php > require_once 'XML/RPC/Server.php'; > > function system_load() > { > $uptime = `uptime`; > if(preg_match("/load average: ([\d.]+/", $uptime, $matches)) > { > return new XML_RPC_Response(new XML_RPC_Value($matches[1], > 'string')); > } > } > > $dispatches = array('system.load' => array('function' => > 'system_uptime')); > new XML_RPC_Server($dispatches, 1); > ?> > > -- > PEAR General Mailing List (http://pear.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- > PEAR General Mailing List (http://pear.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php