|
xmlrpc_encode
Generates XML for a PHP value
(PHP 4 >= 4.0.7, PHP 5)
Related Examples ( Source code ) » xmlrpc_encode Examples ( Source code ) » XmlRpcServer extends HttpResponse Examples ( Source code ) » XmlRpcClient using HttpRequest Code Examples / Notes » xmlrpc_encodedave dot wilcock
Worth noting, you can use this function to generate fault response xml. If you pass a pre-determined array into this function, as follows <? $myArray = array ("faultCode"=>1,"faultString"=>"Too many params"); $xml = xmlrpc_encode($myArray); ?> ... you will get output much like the following: <?xml version="1.0" encoding="utf-8"?> <fault> <value> <struct> <member> <name>faultCode</name> <value> <int>4</int> </value> </member> <member> <name>faultString</name> <value> <string>Too many params</string> </value> </member> </struct> </value> </fault> All that is needed to do here to make it valid XML-RPC is inject some of your own methodResponse tags. Check the XML-RPC specification at http://www.xmlrpc.com/spec hfuecks
This function would be used by an XML-RPC server to convert PHP variables into an XML-RPC response. It would be used within the PHP functions defined using xmlrpc_server_register_method() Uses PHP variable reflection to assign the correct data types for the XML-RPC response. For example; <?php $params = array ( "one"=>"red","two"=>"blue","three"=>"green" ); $response = xmlrpc_encode ( $params ); echo ( $response ); ?> Produces; <?xml version='1.0' encoding="utf-8" ?> <params> <param> <value> <struct> <member> <name>one</name> <value> <string>red</string> </value> </member> <member> <name>two</name> <value> <string>blue</string> </value> </member> <member> <name>three</name> <value> <string>green</string> </value> </member> </struct> </value> </param> </params> While <?php $params = array ( "red", "blue", "green" ); $response = xmlrpc_encode ( $params ); echo ( $response ); ?> produces; <?xml version='1.0' encoding="utf-8" ?> <params> <param> <value> <array> <data> <value> <string>red</string> </value> <value> <string>blue</string> </value> <value> <string>green</string> </value> </data> </array> </value> </param> </params> And <?php $params = 1; $response = xmlrpc_encode ( $params ); echo ( $response ); ?> produces <?xml version='1.0' encoding="utf-8" ?> <params> <param> <value> <int>1</int> </value> </param> </params> It's useful to be aware of the settype() function (http://www.php.net/settype). For binary base64 data and XML-RPC iso8601 date times the xmlrpc_set_type() function should be used on a PHP variable before using xmlrpc_encode() amir.laheratcomplinetdotcom
Beware this quirk: when you xmlrpc_encode a hash into xmlrpc, numeric keys will not be kept. Even strings containing numbers-only will be lost. i.e.: xmlrpc_decode(xmlrpc_encode(array('123'=>456))); returns: array(0=>456); Apparently this is intentional functionality (see http://bugs.php.net/bug.php?id=21949) 2 workarounds: 1. prepend/append a string (even whitespace) to all keys, and strip them out at the other end. eg array('key_123'=>456); 2. create an array of hashes. array(array('key'=>123,'value'=>456)); I favour the second option because it's more deliberate. ... this also applies to xmlrpc_encode_request() 08-jun-2006 03:32
Another quirk (more of a bug i think) is the automatic encoding of hashes where all keys that begin with a digit between 1 and 9 are lost: http://bugs.php.net/bug.php?id=37746 Luckily I found a quick workaround. Just append chr(0x00) to your keys and the xmlrpc response will be correct. Maybe this will apply to encoding of hashes for requests too. |
Change Languagexmlrpc_decode_request xmlrpc_decode xmlrpc_encode_request xmlrpc_encode xmlrpc_get_type xmlrpc_is_fault xmlrpc_parse_method_descriptions xmlrpc_server_add_introspection_data xmlrpc_server_call_method xmlrpc_server_create xmlrpc_server_destroy xmlrpc_server_register_introspection_callback xmlrpc_server_register_method xmlrpc_set_type |