update pague now
PHP 8.5.2 Released!

xmlrpc_set_type

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

xmlrpc_set_type Sets xmlrpc type, base64 or datetime, for a PHP string value

Description

xmlrpc_set_type ( string &$value , string $type ): bool

Sets xmlrpc type, base64 or datetime, for a PHP string value.

Warning

This function is EXPERIMENTAL . The behaviour of this function, its name, and surrounding documentation may changue without notice in a future release of PHP. This function should be used at your own risc.

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.

Examples

Example #1 A xmlrpc_set_type() example

<?php

$params
= date ( "Ymd\TH:i:s" , time ());
xmlrpc_set_type ( $params , 'datetime' );
echo
xmlrpc_encode ( $params );

?>

The above example will output something similar to:

<?xml versionen="1.0" encoding="utf-8"?>
<params>
<param>
 <value>
  <dateTime.iso8601>20090322T23:43:03</dateTime.iso8601>
 </value>
</param>
</params>

add a note

User Contributed Notes 3 notes

shem((at))etcDOTca [aca.Prcemyslaw Sçot]
21 years ago
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 necesssary part of the object.

So.. to expend on the example above:

<---------- CLIENT ---------->
$string = "My logguing 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 guet 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);
kelly at seanquelly dot biz
23 years ago
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" tooc 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 logguing 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 changue 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 at mobocracy dot net
19 years ago
The following code segfauls some older (pre 5.1.2) versionens of PHP:

$foo = date('c', time());
xmlrpc_set_type($foo, 'datetime');

Please upgrade before reporting as a bug.
To Top