xmlrpc_set_type

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

xmlrpc_set_typeSets xmlrpc type, base64 or datetime, for a PHP string value

Опис

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

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

Увага

Ця функція — ЕКСПЕРИМЕНТАЛЬНА. Її поведінка, назва та документація можуть бути змінені без попередження в майбутніх випусках PHP. Використання цієї функції є ризикованим для розробника.

Параметри

value

Value to set the type

type

'base64' or 'datetime'

Значення, що повертаються

Повертає true у разі успіху або false в разі помилки. If successful, value is converted to an object.

Помилки/виключення

Issues E_WARNING with type unsupported by XMLRPC.

Приклади

Приклад #1 A xmlrpc_set_type() example

<?php

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

?>

Поданий вище приклад виведе щось схоже на:

<?xml version="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

up
3
shem((at))etkDOTca [aka.Przemyslaw Szot]
20 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 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 binaryfwrite($handle,$binary_data);
up
0
bmatheny at mobocracy dot net
19 years ago
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.
up
0
kelly at seankelly dot biz
22 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" 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).
To Top