CakeFest 2024: The Official CakePHP Conference

xmlrpc_set_type

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

xmlrpc_set_typePHP 文字列型用に xmlrpc 型、base64 または datetime を設定する

説明

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

PHP の文字列用の xmlrpc 型を、base64 あるいは datetime に設定します。

警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

パラメータ

value

型を設定する値。

type

'base64' あるいは 'datetime'。

戻り値

成功した場合に true を、失敗した場合に false を返します。 成功した場合、value はオブジェクト型に変換されます。

エラー / 例外

XMLRPC がサポートしていない型を指定した場合は E_WARNING が発生します。

例1 xmlrpc_set_type() の例

<?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]
19 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 binary
fwrite($handle,$binary_data);
up
1
kelly at seankelly dot biz
21 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).
up
-1
bmatheny at mobocracy dot net
18 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.
To Top