Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : XML-RPC Functions : xmlrpc_set_type

xmlrpc_set_type

Sets xmlrpc type, base64 or datetime, for a PHP string value (PHP 4 >= 4.0.7, PHP 5)
bool xmlrpc_set_type ( string &value, string type )

Warning:

This function is EXPERIMENTAL. The behaviour of this function, the name of this function, and anything else documented about this function may change without notice in a future release of PHP. Use this function at your own risk.

Parameters

value

Value to set the type

type

'base64' or 'datetime'

Return Values

Returns TRUE on success or FALSE on failure. If successful, value is converted to an object.

Errors/Exceptions

Issues E_WARNING with type unsupported by XMLRPC.

Code Examples / Notes » xmlrpc_set_type

kelly

The problem is that PHP has a string type which is also used to hold binary data and dates.  But XML-RPC defines three separate types for strings, binary data, and dates.  How do you tell how you want strings encoded?  That's where this function comes in.
Suppose the XML-RPC method "log.data" took a string, a date, and a binary object.  To tell XML-RPC that the date (which is a PHP string) is a really a date and that the binary data (which is also a PHP string) is really binary data, try:
$string = "My logging event.";
$date = "20030115T12:22:37"; // Must be this format
$binary = fread($fp, 128);
xmlrpc_set_type(&$date, "datetime");
xmlrpc_set_type(&$binary, "base64");
$xmlrpcReq = xmlrpc_encode_request("log.data", array($string, $date, $binary));
Note the reference passing in the calls to xmlrpc_set_type; that enables the function to change the values from strings into what xmlrpc_encode/_request expects (which are objects that include a bonus field that tells the desired XML-RPC type).


bmatheny

The following code segfaults some older (pre 5.1.2) versions of PHP:
$foo = date('c', time());
xmlrpc_set_type($foo, 'datetime');
Please upgrade before reporting as a bug.


shem

Once you use the xmlrpc_set_type function, the data is encoded into a PHP object.  In your XMLRPC server, in order to access the data you must be able to access the necessary part of the object.
So.. to expend on the example above:
<---------- CLIENT ---------->
$string = "My logging event.";
$date = "20030115T12:22:37"; // Must be this format
$binary = fread($fp, 128);
xmlrpc_set_type(&$date, "datetime");
xmlrpc_set_type(&$binary, "base64");
$xmlrpcReq = xmlrpc_encode_request("log.data", array($string, $date, $binary));
In order to retrieve the binary file data you would need to get the scalar portion of the object:
<---------- SERVER ------------>
$string=$params[0];
$date_obj=$params[1];
$binary_obj=$params[2];
$date=$date_obj->scalar;
$binary_data=$binary_obj->scalar;
// Then you can proceed to write the binary
fwrite($handle,$binary_data);


ncuxxx

I write tutorial.
Look it.
http://2pik.com/article/1/8.html
It`s very useful for russian users :)
And also usefol for LJ. :)


Change Language


Follow Navioo On Twitter
xmlrpc_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
eXTReMe Tracker